Nauka algorytmów. Poradnik pisania lepszego kodu
- Ocena:
- 6.0/6 Opinie: 1
- Stron:
- 232
- Druk:
- oprawa miękka
- Dostępne formaty:
-
PDFePubMobi
Opis ebooka: Nauka algorytmów. Poradnik pisania lepszego kodu
Doskonałe opanowanie dowolnego języka programowania nie wystarczy do tego, aby stać się świetnym programistą czy deweloperem. Konieczne jest również zdobycie praktycznej wiedzy dotyczącej algorytmów. Oznacza to, że aby pisać lepszy kod, podczas rozwiązywania rzeczywistych problemów trzeba umieć korzystać z algorytmów, włączając w to ich budowanie, modyfikację i implementację. Niezależnie od tego, jaką dziedziną informatyki się zajmujesz, biegłość w posługiwaniu się algorytmami w wymierny sposób ułatwi Ci pracę i poprawi jej rezultaty.
Ta książka jest przystępnym wprowadzeniem do wiedzy o algorytmach wraz z przykładami implementacji napisanymi w Pythonie. Oprócz praktycznego omówienia algorytmów znalazło się tu wyjaśnienie takich pojęć jak klasy złożoności czy analiza asymptotyczna. Dokładnie omówiono także najważniejsze algorytmy, w tym różne sposoby haszowania, sortowania czy przeszukiwania. Tam, gdzie to niezbędne, wprowadzono struktury danych języka Python. Z poradnika programiści i testerzy dowiedzą się, w jaki sposób wykorzystywać algorytmy do pomysłowego rozwiązywania problemów obliczeniowych. Zrozumienie treści ułatwiają ciekawe materiały wizualne i ćwiczenia utrwalające, które pozwolą na przetestowanie zdobytej wiedzy w praktyce.
W książce między innymi:
- podstawowe algorytmy wykorzystywane w inżynierii oprogramowania
- standardowe strategie wydajnego rozwiązywania problemów
- ocena złożoności czasowej kodu z wykorzystaniem notacji dużego O
- praktyczne stosowanie algorytmów z wykorzystaniem bibliotek i struktury danych Pythona
- główne zasady działania ważnych algorytmów
Jeśli chodzi o pisanie wydajnego kodu, każdy specjalista od oprogramowania musi mieć praktyczną wiedzę z zakresu algorytmów. W tej praktycznej książce George Heineman (autor podręcznika Algorytmy. Almanach) prezentuje zwięzłe i pouczające opisy najważniejszych algorytmów, które pomagają pisać kod w różnych językach. Programiści, testerzy i osoby odpowiedzialne za konserwację kodu dowiedzą się z tej pozycji, jak za pomocą tych algorytmów w pomysłowy sposób rozwiązywać problemy obliczeniowe.
Każdy rozdział bazuje na wcześniejszych. Znajdziesz tu ciekawe materiały wizualne i wprowadzane po kolei najważniejsze zagadnienia, w tym analizę algorytmów pozwalającą sklasyfikować złożoność każdego algorytmu omawianego w tej książce. W końcowej części każdego rozdziału będziesz mógł wykorzystać zdobytą wiedzę do rozwiązania nowych problemów, które przypominają zadania, z jakimi możesz zetknąć się na rozmowie o pracę.
Dzięki tej książce:
- Zbadasz podstawowe algorytmy związane z informatyką i inżynierią oprogramowania
- Poznasz standardowe strategie wydajnego rozwiązywania problemów, na przykład dziel i rządź, programowanie dynamiczne oraz podejście zachłanne
- Przeanalizujesz kod, aby ocenić jego złożoność czasową za pomocą notacji dużego O
- Wykorzystasz istniejące biblioteki i struktury danych z Pythona do rozwiązywania problemów za pomocą algorytmów
- Poznasz główne kroki działania ważnych algorytmów
"Przystępne wprowadzenie, które pozwoli Ci szybko poprawić wydajność kodu. Dzięki książce Nauka algorytmów poznasz podstawowe algorytmy i typy danych stosowane w informatyce. Jeśli starasz się o pozycję pracownika technicznego, która wymaga umiejętności programowania, ta książka może pomóc Ci dobrze wypaść w trakcie następnej rozmowy kwalifikacyjnej".
Zvi Galil, Były dziekan wydziału informatyki, Wydział informatyki im. Frederica G. Storeya, Georgia Institute of Technology
Wybrane bestsellery
-
When it comes to writing efficient code, every software professional needs to have an effective working knowledge of algorithms. In this practical book, author George Heineman (Algorithms in a Nutshell) provides concise and informative descriptions of key algorithms that improve coding in multipl...(211.65 zł najniższa cena z 30 dni)
211.65 zł
249.00 zł(-15%) -
Książka Algorytmy. Almanach to cała wiedza o algorytmach, potrzebna ambitnemu programiście, zebrana w jeden kompletny podręcznik. Książka zawiera opisy algorytmów do rozwiązywania rozmaitych problemów, pomaga w wyborze i realizacji algorytmów odpowiednich do Twoich potrzeb, a także dostarcza wyda...(51.35 zł najniższa cena z 30 dni)
55.30 zł
79.00 zł(-30%) -
Jak sądzisz, co stanowi bazę informatyki? Od czego powinien zacząć przyszły programista? Może od opanowania jednego z najpopularniejszych języków programowania? Oczywiście mógłby od tego rozpocząć, tyle że to trochę tak, jakby uczyć się korzystać z narzędzia bez świadomości, do czego ono właściwi...
Informacja i kodowanie. Krótkie wprowadzenie z przykładami zastosowań Informacja i kodowanie. Krótkie wprowadzenie z przykładami zastosowań
(41.30 zł najniższa cena z 30 dni)41.30 zł
59.00 zł(-30%) -
Książkę szczególnie docenią analitycy bezpieczeństwa, którzy chcą się zapoznać z zestawem poleceń ARM i zdobyć wiedzę umożliwiającą im efektywne korzystanie z technik inżynierii wstecznej. Poza zestawem potrzebnych poleceń znalazło się w niej mnóstwo przydatnych informacji. Znajdziesz tu przegląd...
Niebieski lis. Polecenia procesorów Arm i inżynieria wsteczna Niebieski lis. Polecenia procesorów Arm i inżynieria wsteczna
(57.84 zł najniższa cena z 30 dni)62.30 zł
89.00 zł(-30%) -
Ewolucja formularzy internetowych zaczęła się od prostych znaczników języka HTML 2.0 opublikowanego w 1993 roku. Z czasem HTML oferował bardziej zaawansowane funkcje obsługi formularzy. Późniejsze wersje, HTML4, a następnie HTML5, wprowadziły nowe typy pól, takie jak pola daty, koloru czy też adr...
Angular i formularze reaktywne. Praktyczny przewodnik Angular i formularze reaktywne. Praktyczny przewodnik
(44.85 zł najniższa cena z 30 dni)48.30 zł
69.00 zł(-30%) -
Jeśli w swojej pracy masz lub miewasz do czynienia z danymi, z pewnością orientujesz się, że do tego celu stworzono dotąd całkiem sporo narzędzi. Nic dziwnego – przy tej liczbie danych, z jaką spotykamy się w dzisiejszym cyfrowym świecie, zdolność do ich sprawnego analizowania i wyciągania ...
Grafana. Kurs video. Monitorowanie, analiza i wizualizacja danych w czasie rzeczywistym Grafana. Kurs video. Monitorowanie, analiza i wizualizacja danych w czasie rzeczywistym
(39.90 zł najniższa cena z 30 dni)69.50 zł
139.00 zł(-50%) -
Tę książkę docenią praktycy: inżynierowie uczenia maszynowego i analitycy danych, poszukujący sposobu praktycznego zaadaptowania modeli transformacyjnych do swoich potrzeb. Autorzy skupili się na praktycznej stronie tworzenia aplikacji językowych, a w poszczególnych rozdziałach ujęto wszystkie na...
Przetwarzanie języka naturalnego z wykorzystaniem transformerów. Budowanie aplikacji językowych za pomocą bibliotek Hugging Face Przetwarzanie języka naturalnego z wykorzystaniem transformerów. Budowanie aplikacji językowych za pomocą bibliotek Hugging Face
(64.35 zł najniższa cena z 30 dni)69.30 zł
99.00 zł(-30%) -
Czym jest inżynieria wymagań? To systematyczne podejście do pozyskiwania i dokumentowania wymagań, a także zarządzania nimi. Polega na zrozumieniu potrzeb i oczekiwań interesariuszy, a następnie opisaniu, za pomocą wymagań, systemu, który je spełnia.
Certyfikowany inżynier wymagań. Na podstawie IREB CPRE. Poziom podstawowy Certyfikowany inżynier wymagań. Na podstawie IREB CPRE. Poziom podstawowy
(44.85 zł najniższa cena z 30 dni)48.30 zł
69.00 zł(-30%) -
Poznaj świat programowania w R, języku stworzonym z myślą o statystyce, analizie danych i wizualizacji. Ta kompleksowa książka poprowadzi Cię krok po kroku od zupełnych podstaw aż po zaawansowane techniki, wszystko to w ciągu jednego dnia. Oto, czego się nauczysz: Podstawy języka R: Zrozumi...
Język R w jeden dzień. R od podstaw, po zaawansowane techniki Język R w jeden dzień. R od podstaw, po zaawansowane techniki
-
To drugie, zaktualizowane wydanie przewodnika po systemie Prometheus. Znajdziesz w nim wyczerpujące wprowadzenie do tego oprogramowania, a także wskazówki dotyczące monitorowania aplikacji i infrastruktury, tworzenia wykresów, przekazywania ostrzeżeń, bezpośredniej instrumentacji kodu i pobierani...
Prometheus w pełnej gotowości. Jak monitorować pracę infrastruktury i wydajność działania aplikacji. Wydanie II Prometheus w pełnej gotowości. Jak monitorować pracę infrastruktury i wydajność działania aplikacji. Wydanie II
(57.84 zł najniższa cena z 30 dni)62.30 zł
89.00 zł(-30%)
O autorze ebooka
George Heineman jest naukowcem i wykładowcą akademickim. Od ponad 20 lat zajmuje się inżynierią oprogramowania i algorytmiką. Jest autorem i współautorem książek technicznych, często też prowadzi szkolenia dotyczące stosowania algorytmów. Ma nietypową pasję: łamigłówki. Jest twórcą odmiany sudoku Sujiken
Zobacz pozostałe książki z serii O'Reilly
-
Dzięki tej książce zrozumiesz bazowe koncepcje programowania funkcyjnego i przekonasz się, że możesz włączać je do kodu bez rezygnacji z paradygmatu obiektowego. Dowiesz się również, kiedy w swojej codziennej pracy używać takich opcji jak niemutowalność i funkcje czyste i dlaczego warto to robić....
Java. Podejście funkcyjne. Rozszerzanie obiektowego kodu Javy o zasady programowania funkcyjnego Java. Podejście funkcyjne. Rozszerzanie obiektowego kodu Javy o zasady programowania funkcyjnego
(56.55 zł najniższa cena z 30 dni)60.90 zł
87.00 zł(-30%) -
Ta książka będzie świetnym uzupełnieniem wiedzy o Flutterze i Darcie, sprawdzi się również jako wsparcie podczas rozwiązywania konkretnych problemów. Znalazło się tu ponad sto receptur, dzięki którym poznasz tajniki pisania efektywnego kodu, korzystania z narzędzi udostępnianych przez framework F...
Flutter i Dart. Receptury. Tworzenie chmurowych aplikacji full stack Flutter i Dart. Receptury. Tworzenie chmurowych aplikacji full stack
(44.85 zł najniższa cena z 30 dni)48.30 zł
69.00 zł(-30%) -
Ten przewodnik, który docenią programiści i architekci, zawiera wyczerpujące omówienie zagadnień projektowania, funkcjonowania i modyfikowania architektury API. Od strony praktycznej przedstawia strategie budowania i testowania API REST umożliwiającego połączenie oferowanej funkcjonalności na poz...
Architektura API. Projektowanie, używanie i rozwijanie systemów opartych na API Architektura API. Projektowanie, używanie i rozwijanie systemów opartych na API
(44.85 zł najniższa cena z 30 dni)48.30 zł
69.00 zł(-30%) -
W tej książce omówiono ponad 20 najprzydatniejszych wzorców projektowych, dzięki którym tworzone aplikacje internetowe będą łatwe w późniejszej obsłudze technicznej i w trakcie skalowania. Poza wzorcami projektowymi przedstawiono wzorce generowania i wydajności działania, których znaczenie dla uż...
Wzorce projektowe w JavaScripcie. Przewodnik dla programistów JavaScriptu i Reacta. Wydanie II Wzorce projektowe w JavaScripcie. Przewodnik dla programistów JavaScriptu i Reacta. Wydanie II
(44.85 zł najniższa cena z 30 dni)48.30 zł
69.00 zł(-30%) -
To gruntownie zaktualizowane i uzupełnione wydanie praktycznego przewodnika po wdrażaniu i testowaniu kontenerów Dockera. Przedstawia proces przygotowania pakietu aplikacji ze wszystkimi ich zależnościami, a także jego testowania, wdrażania, skalowania i utrzymywania w środowiskach produkcyjnych....
Docker. Niezawodne kontenery produkcyjne. Praktyczne zastosowania. Wydanie III Docker. Niezawodne kontenery produkcyjne. Praktyczne zastosowania. Wydanie III
(56.55 zł najniższa cena z 30 dni)60.90 zł
87.00 zł(-30%) -
To książka przeznaczona dla osób, które pracują ze zbiorami danych. Jest praktycznym przewodnikiem po koncepcjach algebry liniowej, pomyślanym tak, by ułatwić ich zrozumienie i zastosowanie w użytecznych obliczeniach. Poszczególne zagadnienia przedstawiono za pomocą kodu Pythona, wraz z przykłada...
Praktyczna algebra liniowa dla analityków danych. Od podstawowych koncepcji do użytecznych aplikacji w Pythonie Praktyczna algebra liniowa dla analityków danych. Od podstawowych koncepcji do użytecznych aplikacji w Pythonie
(50.05 zł najniższa cena z 30 dni)53.90 zł
77.00 zł(-30%) -
Ta książka stanowi wszechstronne omówienie wszystkich bibliotek Pythona, potrzebnych naukowcom i specjalistom pracującym z danymi. Znalazł się tu dokładny opis IPythona, NumPy, Pandas, Matplotlib, Scikit-Learn i innych narzędzi. Podręcznik uwzględnia przede wszystkim ich aspekty praktyczne, dzięk...
Python Data Science. Niezbędne narzędzia do pracy z danymi. Wydanie II Python Data Science. Niezbędne narzędzia do pracy z danymi. Wydanie II
(83.85 zł najniższa cena z 30 dni)90.30 zł
129.00 zł(-30%) -
Oto kolejne wydanie zwięzłego podręcznika dla programistów Javy, który ma ułatwić maksymalne wykorzystanie technologii tego języka w wersji 17. Treść została skrupulatnie przejrzana i uzupełniona o materiał dotyczący nowości w obiektowym modelu Javy. Pierwsza część książki obejmuje wprowadzenie d...(57.84 zł najniższa cena z 30 dni)
62.30 zł
89.00 zł(-30%) -
Dzięki tej książce dowiesz się, w jaki sposób uczynić architekturę oprogramowania wystarczająco plastyczną, aby mogła odzwierciedlać zachodzące zmiany biznesowe i technologiczne. W nowym wydaniu rozbudowano pojęcia zmiany kierowanej i przyrostowej, a także przedstawiono najnowsze techniki dotyczą...
Architektura ewolucyjna. Projektowanie oprogramowania i wsparcie zmian. Wydanie II Architektura ewolucyjna. Projektowanie oprogramowania i wsparcie zmian. Wydanie II
(43.55 zł najniższa cena z 30 dni)46.90 zł
67.00 zł(-30%) -
Oto zwięzły i praktyczny przewodnik po usłudze GA4 i jej integracji z chmurą. Szczególnie skorzystają z niego analitycy danych, biznesu i marketingu. Opisano tu wszystkie istotne kwestie dotyczące tego nowego, potężnego modelu analitycznego. Szczególną uwagę poświęcono bardziej zaawansowanym funk...
Google Analytics od podstaw. Analiza wpływu biznesowego i wyznaczanie trendów Google Analytics od podstaw. Analiza wpływu biznesowego i wyznaczanie trendów
(44.85 zł najniższa cena z 30 dni)48.30 zł
69.00 zł(-30%)
Ebooka "Nauka algorytmów. Poradnik pisania lepszego kodu" przeczytasz na:
-
czytnikach Inkbook, Kindle, Pocketbook, Onyx Boox i innych
-
systemach Windows, MacOS i innych
-
systemach Windows, Android, iOS, HarmonyOS
-
na dowolnych urządzeniach i aplikacjach obsługujących formaty: PDF, EPub, Mobi
Masz pytania? Zajrzyj do zakładki Pomoc »
Audiobooka "Nauka algorytmów. Poradnik pisania lepszego kodu" posłuchasz:
-
w aplikacji Ebookpoint na Android, iOS, HarmonyOs
-
na systemach Windows, MacOS i innych
-
na dowolnych urządzeniach i aplikacjach obsługujących format MP3 (pliki spakowane w ZIP)
Masz pytania? Zajrzyj do zakładki Pomoc »
Kurs Video "Nauka algorytmów. Poradnik pisania lepszego kodu" zobaczysz:
-
w aplikacjach Ebookpoint i Videopoint na Android, iOS, HarmonyOs
-
na systemach Windows, MacOS i innych z dostępem do najnowszej wersji Twojej przeglądarki internetowej
Recenzje ebooka: Nauka algorytmów. Poradnik pisania lepszego kodu (1) Poniższe recenzje mogły powstać po przekazaniu recenzentowi darmowego egzemplarza poszczególnych utworów bądź innej zachęty do jej napisania np. zapłaty.
-
Recenzja: informatywkaa Obrusik ŁucjaRecenzja dotyczy produktu: ebookCzy recenzja była pomocna:
Książka jest idealna dla tych, co znają już podstawy programowania w języku Python i chcą ulepszyć swój kod o algorytmy szybsze czy o mniejszej złożoności pamięciowej lub czasowej. Każdy z kodów jest opisany krótko, zwięźle, a co najważniejsze - autor w całości wyczerpuje temat, nieraz ulepszając tłumaczenia o przykłady z życia czy czytelne grafy, a dodatkowo bardzo czytelny kod. Dodatkowym benefitem książki są również podsumowania i ćwiczenia, umieszczone na końcu każdego rozdziału, żeby czytelnik mógł przeczytać, co najważniejsze jeszcze raz oraz przetestować w praktyce zdobytą wiedzę. Książka oczywiście posiada również repozytorium, w którym dostępne są m.in. rozwiązania ćwiczeń z końca rozdziałów oraz kody użyte w książce. Odkryłam tę książkę idealnie przed kolokwium z algorytmów sortowania i wiem, że dzięki niej, z kolokwium uzyskam wysoki wynik, bo w końcu kod stał się dla mnie czytelny i logiczny. Polecam wszystkim, którzy niekiedy mają problem ze zrozumieniem kodu oraz wszytkim dociekliwym. Nie rozczarujecie się nią i często będziecie po nią sięgać.
Szczegóły ebooka
- Tytuł oryginału:
- Learning Algorithms: A Programmer's Guide to Writing Better Code
- Tłumaczenie:
- Tomasz Walczak
- ISBN Książki drukowanej:
- 978-83-283-8799-7, 9788328387997
- Data wydania książki drukowanej:
- 2022-04-05
- ISBN Ebooka:
- 978-83-283-8802-4, 9788328388024
- Data wydania ebooka:
- 2022-04-05 Data wydania ebooka często jest dniem wprowadzenia tytułu do sprzedaży i może nie być równoznaczna z datą wydania książki papierowej. Dodatkowe informacje możesz znaleźć w darmowym fragmencie. Jeśli masz wątpliwości skontaktuj się z nami sklep@ebookpoint.pl.
- Format:
- 168x237
- Numer z katalogu:
- 158430
- Rozmiar pliku Pdf:
- 6.7MB
- Rozmiar pliku ePub:
- 13.2MB
- Rozmiar pliku Mobi:
- 31.1MB
- Pobierz przykładowy rozdział PDF
- Przykłady na ftp
Ebook zawiera materiały dodatkowe, które możesz pobrać z serwera FTP - link znajdziesz na stronie redakcyjnej.
- Zgłoś erratę
- Serie wydawnicze: O'Reilly
Spis treści ebooka
- Dla kogo przeznaczona jest ta książka?
- O kodzie
- Konwencje używane w tej książce
- Podziękowania
- Czym jest algorytm?
- Znajdowanie największej wartości w dowolnej liście
- Zliczanie kluczowych operacji
- Modele pozwalają prognozować wydajność algorytmu
- Znajdowanie dwóch największych wartości na dowolnej liście
- Algorytm pucharowy
- Złożoność czasowa i pamięciowa
- Podsumowanie
- Ćwiczenia
- Używanie modeli empirycznych do prognozowania wydajności
- Mnożenie można wykonywać szybciej
- Klasy złożoności
- Analiza asymptotyczna
- Zliczanie wszystkich operacji
- Zliczanie wszystkich bajtów
- Gdy zamykają się jedne drzwi, otwierają się inne
- Wyszukiwanie binarne w tablicy
- Prawie tak łatwe jak ?
- Dwie pieczenie na jednym ogniu
- Łączenie wszystkich elementów
- Dopasowywanie do krzywej a dolna i górna granica
- Podsumowanie
- Ćwiczenia
- Łączenie wartości z kluczami
- Funkcje haszujące i skróty
- Tablica z haszowaniem dla par (klucz, wartość)
- Wykrywanie i rozwiązywanie kolizji za pomocą próbkowania liniowego
- Tworzenie odrębnych łańcuchów dzięki listom powiązanym
- Usuwanie elementu z listy powiązanej
- Ocena wydajności
- Zwiększanie rozmiaru tablic z haszowaniem
- Analiza wydajności dynamicznych tablic z haszowaniem
- Haszowanie doskonałe
- Iteracyjne pobieranie par (klucz, wartość)
- Podsumowanie
- Ćwiczenia
- Kopce binarne typu max
- Wstawianie elementu (wartość, priorytet)
- Usuwanie wartości o najwyższym priorytecie
- Reprezentowanie kopca binarnego za pomocą tablicy
- Implementacja "wypływania" i "zatapiania"
- Podsumowanie
- Ćwiczenia
- Sortowanie przez przestawianie
- Sortowanie przez wybieranie
- Budowa algorytmu sortowania o złożoności kwadratowej
- Analizowanie wydajności sortowania przez wstawianie i sortowania przez wybieranie
- Rekurencja oraz podejście dziel i rządź
- Sortowanie przez scalanie
- Sortowanie szybkie
- Sortowanie przez kopcowanie
- Porównanie wydajności algorytmów o złożoności O(N log N)
- Algorytm timsort
- Podsumowanie
- Ćwiczenie
- Wprowadzenie
- Binarne drzewa poszukiwań
- Szukanie wartości w binarnym drzewie poszukiwań
- Usuwanie wartości z binarnego drzewa poszukiwań
- Przechodzenie drzewa binarnego
- Analiza wydajności binarnych drzew poszukiwań
- Samoorganizujące się drzewa binarne
- Analiza wydajności drzew samoorganizujących się
- Używanie drzewa binarnego jako tablicy symboli (klucz, wartość)
- Używanie drzewa binarnego jako kolejki priorytetowej
- Podsumowanie
- Ćwiczenia
- Grafy służą do wydajnego zapisywania przydatnych informacji
- Znajdowanie drogi w labiryncie za pomocą przeszukiwania w głąb
- Inna strategia - przeszukiwanie wszerz
- Grafy skierowane
- Grafy z wagami krawędzi
- Algorytm Dijkstry
- Najkrótsze ścieżki dla wszystkich par
- Algorytm Floyda-Warshalla
- Podsumowanie
- Ćwiczenia
- Wbudowane typy Pythona
- Implementowanie stosu w Pythonie
- Implementowanie kolejek w Pythonie
- Implementacje kopca i kolejki priorytetowej
- Dalsza nauka
Przedmowa
Wprowadzenie
1. Rozwiązywanie problemów
2. Analiza algorytmów
3. Lepsze życie dzięki lepszemu haszowaniu
4. Wędrówka po kopcu
5. Sortowanie bez tajemnic
6. Drzewa binarne - nieskończoność na wyciągnięcie ręki
7. Grafy - połącz punkty
8. Podsumowanie
O autorach
Oceny i opinie klientów: Nauka algorytmów. Poradnik pisania lepszego kodu George Heineman (1) Weryfikacja opinii następuję na podstawie historii zamówień na koncie Użytkownika umieszczającego opinię. Użytkownik mógł otrzymać punkty za opublikowanie opinii uprawniające do uzyskania rabatu w ramach Programu Punktowego.
(1)
(0)
(0)
(0)
(0)
(0)