40 algorytmów,
które powinien znać każdy programista
Nauka
implementacji algorytmów w Pythonie
Wiedza
o algorytmach jest niezbędna każdemu, kto rozwiązuje problemy
programistyczne. Algorytmy są również ważne w teorii i
praktyce obliczeń. Każdy programista powinien znać możliwie szeroki ich
zakres. Powinien też umieć z nich korzystać przy rozwiązywaniu
rzeczywistych problemów, w tym przy projektowaniu
algorytmów, ich modyfikacji i implementacji. Niezależnie od
tego, czy zajmujesz się sztuczną inteligencją, zabezpieczaniem
systemów informatycznych lub inżynierią danych, musisz
dobrze zrozumieć, czym właściwie są i jak działają algorytmy.
Ta książka jest
praktycznym wprowadzeniem do algorytmów i ich zastosowania.
Znalazły się w niej podstawowe informacje i pojęcia dotyczące
algorytmów, ich działania, a także ograniczeń, jakim
podlegają. Opisano też techniki ich projektowania z uwzględnieniem
wymagań dotyczących struktur danych. Zaprezentowano klasyczne algorytmy
sortowania i wyszukiwania, algorytmy grafowe, jak również
wiele zagadnień związanych ze sztuczną inteligencją: algorytmy uczenia
maszynowego, sieci neuronowych i przetwarzania języka naturalnego.
Ważną częścią publikacji są rozdziały poświęcone przetwarzaniu danych i
kryptografii oraz algorytmom powiązanym z tymi zagadnieniami.
Wartościowym podsumowaniem prezentowanych treści jest
omówienie technik pracy z problemami NP-trudnymi.
W książce między innymi:
- struktury danych i
algorytmy w bibliotekach Pythona
- algorytm grafowy służący
do wykrywania oszustw w procesie analizy sieciowej
- przewidywanie pogody przy
użyciu algorytmów uczenia nadzorowanego
- rozpoznawanie obrazu za
pomocą syjamskich sieci neuronowych
- tworzenie systemu
rekomendacji filmów
- szyfrowanie symetryczne i
asymetryczne podczas wdrażania modelu uczenia maszynowego
O
autorze 11
O recenzencie 13
Przedmowa 15
WSTĘP I PODSTAWOWE
ALGORYTMY
21
Rozdział 1.
Wprowadzenie
do algorytmów 23
Co to jest algorytm? 24
Fazy algorytmu 24
Określenie logiki algorytmu 26
Zrozumienie pseudokodu 26
Korzystanie z fragmentów kodu (snippetów) 28
Stworzenie planu wykonania 28
Wprowadzenie do pakietów w Pythonie 29
Pakiety w Pythonie 30
Programowanie w Pythonie z Jupyter Notebook 31
Techniki projektowania algorytmów 31
Wymiar danych 33
Wymiar obliczeniowy 33
Analiza efektywności 35
Analiza pamięciowej złożoności obliczeniowej 35
Czasowa złożoność obliczeniowa 36
Szacowanie efektywności 37
Wybór algorytmu 37
Notacja dużego O 38
Walidacja algorytmu 41
Algorytmy dokładne, aproksymacyjne i randomizowane 41
Możliwość wyjaśnienia 43
Podsumowanie 43
Rozdział 2.
Struktury danych w algorytmach
45
Struktury danych w Pythonie 46
Lista 46
Krotka 50
Słownik 51
Zbiór 52
Ramka danych 54
Macierz 56
Abstrakcyjne typy danych 57
Wektor 57
Stos 58
Kolejka 60
Kiedy używać stosów i kolejek? 62
Drzewo 62
Podsumowanie 65
Rozdział 3.
Algorytmy sortowania wyszukiwania 67
Wprowadzenie do algorytmów sortowania 68
Zamiana wartości zmiennych w Pythonie 68
Sortowanie bąbelkowe 68
Sortowanie przez wstawianie 71
Sortowanie przez scalanie 72
Sortowanie Shella 74
Sortowanie przez wymianę 76
Wprowadzenie do algorytmów wyszukiwania 78
Wyszukiwanie liniowe 78
Wyszukiwanie binarne 79
Wyszukiwanie interpolacyjne 79
Praktyczne przykłady 80
Podsumowanie 83
Rozdział 4.
Projektowanie
algorytmów 85
Wprowadzenie do projektowania algorytmów 86
Kwestia 1: Czy algorytm zwraca rezultat, jakiego oczekujemy? 87
Kwestia 2: Czy robi to w optymalny sposób? 87
Kwestia 3: Jak efektywny będzie ten algorytm zastosowany do większych
zbiorów danych? 90
Strategie algorytmiczne 91
Strategia "dziel i rządź" 91
Strategia programowania dynamicznego 93
Strategia algorytmu zachłannego 93
Praktyczny przykład - rozwiązanie problemu komiwojażera 94
Metoda siłowa 95
Zastosowanie algorytmu zachłannego 98
Algorytm PageRank 99
Definicja problemu 100
Implementacja algorytmu PageRank 100
Programowanie liniowe 102
Definicja problemu w programowaniu liniowym 102
Praktyczny przykład - planowanie przepustowości za pomocą programowania
liniowego 103
Podsumowanie 105
Rozdział 5.
Algorytmy
grafowe 107
Reprezentacja grafów 108
Rodzaje grafów 109
Specjalne rodzaje krawędzi 111
Sieci egocentryczne 112
Analiza sieciowa 112
Wprowadzenie do teorii analizy sieciowej 113
Najkrótsza ścieżka 113
Określanie sąsiedztwa 114
Wskaźnik centralności 115
Obliczanie wskaźników centralności w Pythonie 117
Trawersowanie grafu 119
Wyszukiwanie wszerz 119
Wyszukiwanie w głąb 121
Studium przypadku - analiza oszustw 125
Prosta analiza pod kątem oszustwa 127
Podejście strażnicy 128
Podsumowanie 130
ALGORYTMY UCZENIA
MASZYNOWEGO 131
Rozdział 6.
Algorytmy
nienadzorowanego uczenia maszynowego
133
Wprowadzenie do nienadzorowanego uczenia maszynowego 134
Uczenie nienadzorowane w cyklu życia eksploracji danych 134
Trendy badawcze w zakresie uczenia nienadzorowanego 137
Praktyczne przykłady 137
Algorytmy klasteryzacji 138
Wyliczanie podobieństw 139
Grupowanie hierarchiczne 145
Ocena klastrów 147
Zastosowania klasteryzacji 148
Redukcja wymiarów 148
Analiza głównych składowych 149
Ograniczenia analizy głównych składowych 151
Reguły asocjacyjne 151
Przykłady użycia 151
Analiza koszykowa 152
Reguły asocjacyjne 153
Wskaźniki reguł 154
Algorytmy analizy asocjacyjnej 156
Praktyczny przykład - grupowanie podobnych tweetów 160
Modelowanie tematów 161
Klasteryzacja 162
Algorytmy wykrywania odchyleń 162
Wykorzystanie klastrów 162
Wykorzystanie wykrywania odchyleń opartego na gęstości 162
Wykorzystanie maszyny wektorów nośnych 163
Podsumowanie 163
Rozdział 7.
Tradycyjne
algorytmy uczenia nadzorowanego
165
Nadzorowane uczenie maszynowe 166
Żargon nadzorowanego uczenia maszynowego 166
Warunki konieczne 168
Rozróżnienie między klasyfikatorami a regresorami 169
Algorytmy klasyfikujące 169
Wyzwanie dla klasyfikatorów 170
Inżynieria cech w przetwarzaniu potokowym 171
Ocena klasyfikatorów 173
Określenie faz klasyfikacji 177
Algorytm drzewa decyzyjnego 178
Metody zespolone 181
Regresja logistyczna 185
Maszyna wektorów nośnych 187
Naiwny klasyfikator bayesowski 189
Zwycięzcą wśród algorytmów klasyfikacji jest...
192
Algorytmy regresji 193
Wyzwanie dla regresji 193
Regresja liniowa 195
Algorytm drzewa regresji 199
Regresyjny algorytm wzmocnienia gradientowego 199
Zwycięzcą wśród algorytmów regresji jest... 200
Praktyczny przykład, jak przewidywać pogodę 201
Podsumowanie 203
Rozdział 8.
Algorytmy sieci neuronowych
205
Wprowadzenie do sieci neuronowych 206
Ewolucja sieci neuronowych 207
Trenowanie sieci neuronowej 209
Anatomia sieci neuronowej 209
Definicja gradientu prostego 210
Funkcje aktywacji 212
Narzędzia i modele 217
Keras 217
TensorFlow 220
Rodzaje sieci neuronowych 222
Uczenie transferowe 224
Studium przypadku - użycie uczenia głębokiego do wykrywania oszustw 225
Metodologia 225
Podsumowanie 228
Rozdział 9.
Algorytmy
przetwarzania języka naturalnego
231
Wprowadzenie do przetwarzania języka naturalnego 232
Terminologia przetwarzania języka naturalnego 232
NLTK 234
Model bag-of-words 234
Wektorowe przedstawienie słów 237
Otoczenie słowa 237
Właściwości wektorowego przedstawienia słów 237
Użycie rekurencyjnych sieci neuronowych do przetwarzania języka
naturalnego 238
Wykorzystanie przetwarzania języka naturalnego do analizy sentymentu 239
Studium przypadku - analiza sentymentu w recenzjach filmowych 241
Podsumowanie 243
Rozdział 10.
Silniki poleceń 245
Wprowadzenie do silników poleceń 245
Rodzaje silników poleceń 246
Silniki poleceń oparte na treści 246
Silniki poleceń oparte na filtrowaniu kooperacyjnym 248
Hybrydowe silniki poleceń 250
Ograniczenia systemów poleceń 252
Zimny start 252
Wymagania dotyczące metadanych 252
Problem rzadkości danych 253
Tendencyjność ze względu na wpływ społeczny 253
Ograniczone dane 253
Obszary praktycznych zastosowań 253
Przykład praktyczny - stworzenie silnika poleceń 254
Podsumowanie 256
ZAGADNIENIA ZAAWANSOWANE
257
Rozdział 11.
Algorytmy danych
259
Wprowadzenie do algorytmów danych 259
Klasyfikacja danych 260
Algorytmy przechowywania danych 261
Strategie przechowywania danych 261
Algorytmy strumieniowania danych 263
Zastosowania strumieniowania 264
Algorytmy kompresji danych 264
Algorytmy kompresji bezstratnej 264
Przykład praktyczny - analiza sentymentu na Twitterze 266
Podsumowanie 269
Rozdział 12.
Kryptografia 271
Wprowadzenie do kryptografii 271
Waga najsłabszego ogniwa 272
Terminologia 272
Wymagania bezpieczeństwa 273
Podstawy projektowania szyfrów 275
Rodzaje technik kryptograficznych 278
Kryptograficzna funkcja skrótu 278
Szyfrowanie symetryczne 281
Szyfrowanie asymetryczne 283
Przykład - kwestie bezpieczeństwa we wdrażaniu modelu uczenia
maszynowego 286
Atak man-in-the-middle 287
Obrona przed techniką masquerading 289
Szyfrowanie danych i modelu 289
Podsumowanie 291
Rozdział 13.
Algorytmy przetwarzania
danych w dużej skali 293
Wprowadzenie do algorytmów przetwarzania danych w dużej
skali 294
Definicja dobrze zaprojektowanego algorytmu przetwarzania danych w
dużej skali 294
Terminologia 294
Projektowanie algorytmów równoległych 295
Prawo Amdahla 295
Szczegółowość podprocesów 298
Równoważenie obciążenia 298
Przetwarzanie lokalne 299
Procesy współbieżne w Pythonie 299
Tworzenie strategii przetwarzania na puli zasobów 299
Architektura CUDA 300
Obliczenia w klastrze 303
Strategia hybrydowa 305
Podsumowanie 305
Rozdział 14.
Uwagi praktyczne
307
Wprowadzenie do uwag praktycznych 308
Smutna historia bota sztucznej inteligencji na Twitterze 308
Transparentność algorytmu 309
Algorytmy uczenia maszynowego i transparentność 309
Etyka i algorytmy 313
Problemy z algorytmami uczącymi się 313
Znaczenie kwestii etycznych 313
Ograniczanie stronniczości modeli 315
Problemy NP-trudne 316
Uproszczenie problemu 316
Dopasowanie dobrze znanego rozwiązania podobnego problemu 316
Metoda probabilistyczna 317
Kiedy używać algorytmów 317
Praktyczny przykład - teoria czarnego łabędzia 318
Podsumowanie 320
320
stron, Format: 17.0x24.0cm, oprawa miękka