Description
Aby aplikacje mogły spełniać oczekiwania dotyczące wydajności i szybkości działania, programista musi orientować się w typowych problemach z wykonywaniem kodu i wiedzieć, które techniki sprawdzą się w danej sytuacji. W tym celu powinien biegle posługiwać się algorytmami i strukturami danych. Wiedza ta umożliwia rozpoznawanie typowych zagrożeń i wybór najlepszych rozwiązań. Warto pamiętać, że w przypadku większości codziennych problemów z kodem istnieją już wypróbowane rozwiązania. Znajomość tych zagadnień jest niezwykle ważna dla każdego inżyniera oprogramowania.To książka przeznaczona dla programistów, którzy chcą w praktyczny sposób posługiwać się popularnymi algorytmami i strukturami danych, zrozumieć ich działanie i skuteczniej poprawiać wydajność swojego kodu w Javie. Przedstawiono tu narzędzia przydatne w pracy z algorytmami i w tworzeniu efektywnych aplikacji. Opisano praktyczne aspekty złożoności algorytmów. Omówiono algorytmy sortowania oraz inne popularne wzorce programowania, a także takie struktury danych jak drzewa binarne, tablice z haszowaniem i grafy. Następnie zaprezentowano koncepcje bardziej zaawansowane, wśród nich paradygmaty projektowania algorytmów i teorię grafów.W tej książce między innymi:definiowanie algorytmu i złożoność algorytmicznastruktury danych i ich implementacjealgorytmy sortowania i wyszukiwania wzorca w tekścieparadygmaty projektowania algorytmówgrafy i sposoby ich reprezentacji w programach komputerowychgrafy jako moduły do budowy złożonych algorytmówAlgorytm i struktura danych: tak działa optymalny kod!Spis treści:O autorze 7Wstęp 9Rozdział 1. Algorytmy i ich złożoność 13Tworzymy nasz pierwszy algorytm 14Algorytm konwersji liczb dwójkowych na dziesiętne 14Mierzenie złożoności algorytmów za pomocą notacji dużego O 16Przykład na złożoność 16Zrozumienie złożoności 18Notacja złożoności 22Identyfikacja algorytmów o różnej złożoności 26Złożoność liniowa 26Złożoność kwadratowa 27Złożoność logarytmiczna 28Złożoność wykładnicza 30Złożoność stała 31Podsumowanie 33Rozdział 2. Algorytmy sortowania i podstawowe struktury danych 35Wprowadzenie do sortowania bąbelkowego 35Zrozumienie sortowania bąbelkowego 36Udoskonalanie sortowania bąbelkowego 37Zrozumienie sortowania szybkiego 40Zrozumienie rekurencji 40Podział w wyszukiwaniu szybkim 41Jak to wszystko poskładać razem 44Korzystanie z sortowania przez scalanie 45Dzielenie problemu 46Scalanie problemu 47Rozpoczęcie pracy z podstawowymi strukturami danych 50Wprowadzenie do struktur danych 50Struktura list powiązanych 51Operacje na listach powiązanych 53Kolejki 56Stosy 57Modelowanie stosów i kolejek przy użyciu tablic 59Podsumowanie 63Rozdział 3. Tablice z haszowaniem i binarne drzewa poszukiwań 65Wprowadzenie do tablic z haszowaniem 65Zrozumienie tablic z haszowaniem 66Rozwiązywanie kolizji przez łańcuchowanie 68Rozwiązywanie kolizji przez adresowanie otwarte 71Haszowanie uniwersalne 76Rozpoczęcie pracy z binarnymi drzewami poszukiwań 78Struktura drzewa binarnego 78Operacje na binarnych drzewach poszukiwań 80Przechodzenie przez binarne drzewo poszukiwań 83Zrównoważone binarne drzewa poszukiwań 85Podsumowanie 90Rozdział 4. Paradygmaty projektowania algorytmów 91Wprowadzenie do algorytmów zachłannych 92Problem wyboru zajęć 92Rozwiązanie problemu wyboru zajęć 94Składniki algorytmu zachłannego 94Kodowanie Huffmana 96Ćwiczenie: Implementacja algorytmu zachłannego do obliczania ułamków egipskich 100Wprowadzenie do algorytmów typu „dziel i zwyciężaj” 101Podejście „dziel i zwyciężaj” 101Metoda rekurencji uniwersalnej 102Problem najbliższej pary punktów 104Ćwiczenie: Rozwiązywanie problemu podtablicy o największej sumie 106Zrozumienie programowania dynamicznego 108Elementy problematyki programowania dynamicznego 108Dyskretny problem plecakowy 109Najdłuższy wspólny podciąg 112Ćwiczenie: Problem wydawania reszty 114Podsumowanie 115Rozdział 5. Algorytmy wyszukiwania wzorca w tekście 117Algorytm wyszukiwania naiwnego 117Implementacja wyszukiwania naiwnego 118Usprawnienie algorytmu wyszukiwania naiwnego 119Pierwsze kroki z algorytmem wyszukiwania wzorca Boyera-Moorea 120Zasada niezgodności 120Zasada dobrego sufiksu 123Zastosowanie algorytmu Boyera-Moorea 126Prezentacja innych algorytmów wyszukiwania wzorca w tekście 127Algorytm Rabina-Karpa 128Algorytm Knutha-Morrisa-Pratta 129Algorytm Aho-Corasick 130Podsumowanie 130Rozdział 6. Grafy, liczby pierwsze i klasy złożoności 131Reprezentacja grafów 132Listy sąsiedztwa 133Macierz sąsiedztwa 135Przechodzenie przez graf 137Przeszukiwanie wszerz 138Przeszukiwanie w głąb 140Wykrywanie cykli 143Obliczanie najkrótszych ścieżek 145Najkrótsza ścieżka z pojedynczego źródła: algorytm Dijkstry 145Najkrótsze ścieżki dla wszystkich par wierzchołków: algorytm Floyda-Warshalla 150Liczby pierwsze w algorytmach 153Sito Eratostenesa 154Rozkład na czynniki pierwsze 154Inne koncepcje związane z grafami 155Minimalne drzewa rozpinające 155Algorytm A* 156Problem maksymalnego przepływu 156Zrozumienie klas złożoności problemów 157Podsumowanie 158Skorowidz 159O autorze: James Cutajar jest programistą specjalizującym się w skalowalnych obliczeniach o wysokiej wydajności oraz w algorytmach rozproszonych. Pisze książki, bierze udział w projektach rozwoju otwartego oprogramowania, bloguje i zajmuje się marketingiem technologii.
Informatyka
prawo energetyczne ustawa, etorfina, krol henryk, nie dam, choć, rail baltica, państwowe gospodarstwa rolne, noah imię, komentarz, mieszkania jarosław, główny urząd statystyczny inflacja, życie po śmierci, wrocław tramwaje, lekarski egzamin końcowy, muzeum narodowe warszawa, wyscig z czasem 2003, kurs akcji jastrzębskiej spółki węglowej, mogilniki, vat ue
yyyyy