E-book details

50 algorytmów, które powinien znać każdy programista. Klasyczne i nowoczesne algorytmy z dziedzin uczenia maszynowego, projektowania oprogramowania, systemów danych i kryptografii. Wydanie II

50 algorytmów, które powinien znać każdy programista. Klasyczne i nowoczesne algorytmy z dziedzin uczenia maszynowego, projektowania oprogramowania, systemów danych i kryptografii. Wydanie II

Imran Ahmad

Ebook

Wiedza o algorytmach jest niezbędna przy rozwiązywaniu problemów programistycznych i prowadzeniu złożonych obliczeń. Każdy programista powinien dobrze znać algorytmy, musi też umieć je zaprojektować, modyfikować i stosować. Niezależnie od tego, czy zajmujesz się uczeniem maszynowym, kwestiami bezpieczeństwa, czy inżynierią danych, rzetelne zrozumienie algorytmów jest Ci bardzo potrzebne.

Dzięki tej książce nauczysz się stosować algorytmy w praktycznych sytuacjach i zrozumiesz mechanizmy ich działania. Liczne przykłady pozwolą Ci się zapoznać z kilkoma sposobami ich projektowania i implementacji. Następnie poznasz algorytm określania pozycji stron w wynikach wyszukiwarek internetowych, związane z nimi grafy i algorytmy uczenia maszynowego, a także logikę. Zaznajomisz się ponadto z nowoczesnymi modelami sekwencyjnymi i ich wariantami, jak również algorytmami, metodykami i architekturami implementacji dużych modeli językowych, takich jak ChatGPT. W ostatniej części tego przewodnika znajdziesz opis technik przetwarzania równoległego, przydatnego w zadaniach wymagających dużej mocy obliczeniowej.

W książce między innymi:

  • projektowanie algorytmów przeznaczonych do złożonych zadań
  • sieci neuronowe i techniki uczenia głębokiego
  • struktury danych i algorytmy dostępne w bibliotekach Pythona
  • algorytm grafowy służący do wykrywania oszustw za pomocą analizy sieciowej
  • najnowocześniejsze algorytmy przetwarzania języka naturalnego
  • tworzenie systemu rekomendacji filmów
  • sekwencyjne modele uczenia maszynowego i nowoczesne modele LLM

Algorytmy: klucz do sukcesu w programowaniu!

O autorze

O recenzentach

Przedmowa

Wprowadzenie

Część 1. Wstęp i podstawowe algorytmy

  • Rozdział 1. Wprowadzenie do algorytmów
    • Co to jest algorytm?
      • Fazy algorytmu
      • Środowisko programowania
    • Pakiety w Pythonie
      • Ekosystem SciPy
      • Jupyter Notebook
    • Techniki projektowania algorytmów
      • Wymiar danych
      • Wymiar obliczeniowy
    • Analiza efektywności
      • Analiza pamięciowej złożoności obliczeniowej
      • Czasowa złożoność obliczeniowa
      • Szacowanie efektywności
      • Notacja dużego O
      • Złożoność stała (O(1))
      • Złożoność liniowa (O(n))
      • Złożoność kwadratowa (O(n²))
      • Złożoność logarytmiczna
    • Wybór algorytmu
    • Walidacja algorytmu
      • Algorytmy dokładne, aproksymacyjne i randomizowane
      • Możliwość wyjaśnienia
    • Podsumowanie
  • Rozdział 2. Struktury danych w algorytmach
    • Struktury danych w Pythonie
      • Lista
      • Krotka
      • Słowniki i zbiory
      • Struktury danych Series i DataFrame
      • Macierz
    • Abstrakcyjne typy danych
      • Wektor
      • Stos
      • Kolejka
      • Drzewo
    • Podsumowanie
  • Rozdział 3. Algorytmy sortowania i wyszukiwania
    • Wprowadzenie do algorytmów sortowania
      • Zamiana wartości zmiennych w Pythonie
      • Sortowanie bąbelkowe
      • Sortowanie przez wstawianie
      • Sortowanie przez scalanie
      • Sortowanie Shella
      • Sortowanie przez wybieranie
      • Wybór właściwego algorytmu sortującego
    • Wprowadzenie do algorytmów wyszukiwania
      • Wyszukiwanie liniowe
      • Wyszukiwanie binarne
      • Wyszukiwanie interpolacyjne
    • Praktyczne przykłady
    • Podsumowanie
  • Rozdział 4. Projektowanie algorytmów
    • Wprowadzenie do projektowania algorytmów
      • Kwestia 1: poprawność. Czy algorytm zwraca rezultat, jakiego oczekujemy?
      • Kwestia 2: efektywność. Czy robi to w optymalny sposób?
      • Kwestia 3: skalowalność. Jak efektywny będzie ten algorytm zastosowany do większych zbiorów danych?
    • Strategie algorytmiczne
      • Strategia "dziel i rządź"
      • Strategia programowania dynamicznego
      • Strategia algorytmu zachłannego
    • Praktyczny przykład - rozwiązanie problemu komiwojażera
      • Metoda siłowa
      • Zastosowanie algorytmu zachłannego
      • Porównanie trzech strategii
    • Algorytm PageRank
      • Definicja problemu
      • Implementacja algorytmu PageRank
    • Programowanie liniowe
      • Definicja problemu w programowaniu liniowym
      • Praktyczny przykład - planowanie przepustowości za pomocą programowania liniowego
    • Podsumowanie
  • Rozdział 5. Algorytmy grafowe
    • Zwięzłe wprowadzenie do grafów
      • Grafy jako szkielet nowoczesnych sieci danych
      • Podstawa grafów: węzły (lub wierzchołki)
    • Teoria grafów i analiza sieci
    • Reprezentacja grafów
    • Mechanika i typy grafów
      • Sieci egocentryczne
    • Wprowadzenie do teorii analizy sieciowej
      • Najkrótsza ścieżka
      • Wskaźnik centralności
      • Obliczanie wskaźników centralności w Pythonie
      • Analiza sieci społecznościowych
    • Przeglądanie grafu
      • Wyszukiwanie wszerz
      • Wyszukiwanie w głąb
    • Studium przypadku - wykrywanie oszustw za pomocą SNA
      • Wprowadzenie
      • Czym jest oszustwo w tym kontekście
      • Prosta analiza pod kątem oszustwa
      • Podejście strażnicy
    • Podsumowanie

Część 2. Algorytmy uczenia maszynowego

  • Rozdział 6. Algorytmy nienadzorowanego uczenia maszynowego
    • Wprowadzenie do nienadzorowanego uczenia maszynowego
      • Uczenie nienadzorowane w cyklu życia eksploracji danych
      • Trendy badawcze w zakresie uczenia nienadzorowanego
      • Praktyczne przykłady
    • Algorytmy klasteryzacji
      • Algorytm k-średnich (algorytm centroidów)
    • Kroki grupowania hierarchicznego
    • Implementacja grupowania hierarchicznego
    • Algorytm DBSCAN
    • Tworzenie klastrów przy użyciu algorytmu DBSCAN w Pythonie
    • Ocena klastrów
    • Redukcja wymiarów
      • Analiza głównych składowych
    • Wyszukiwanie reguł asocjacyjnych
      • Rodzaje reguł
      • Wskaźniki reguł
      • Algorytmy analizy asocjacyjnej
    • Podsumowanie
  • Rozdział 7. Tradycyjne algorytmy uczenia nadzorowanego
    • Nadzorowane uczenie maszynowe
    • Problemy nadzorowanego uczenia maszynowego
      • Warunki konieczne
      • Rozróżnienie między klasyfikatorami a regresorami
    • Algorytmy klasyfikujące
      • Wyzwanie dla klasyfikatorów
      • Tablica pomyłek
      • Kompromis między czułością i precyzją
    • Algorytm drzewa decyzyjnego
      • Algorytm klasyfikujący drzewa decyzyjnego
      • Wady i zalety klasyfikatorów opartych na drzewach decyzyjnych
      • Przypadki użycia
    • Metody zespolone
      • Implementacja wzmacniania gradientowego
      • Różnica między lasem losowym a wzmocnieniem gradientowym
      • Wykorzystanie algorytmu lasu losowego do wyzwania dla klasyfikatorów
    • Regresja logistyczna
      • Założenia
      • Określanie relacji
      • Funkcje straty i kosztu
      • Kiedy używać regresji logistycznej
      • Wykorzystanie algorytmu regresji logistycznej do wyzwania dla klasyfikatorów
    • Maszyna wektorów nośnych
      • Wykorzystanie maszyny wektorów nośnych do wyzwania dla klasyfikatorów
      • Naiwny klasyfikator bayesowski
    • Twierdzenie Bayesa
      • Wyliczanie prawdopodobieństwa
      • Reguły mnożenia dla koniunkcji zdarzeń
      • Ogólne zasady mnożenia
      • Zasady dodawania dla alternatywy zdarzeń
      • Wykorzystanie naiwnego klasyfikatora bayesowskiego do wyzwania dla klasyfikatorów
    • Zwycięzcą wśród algorytmów klasyfikacji jest.
      • Algorytmy regresji
      • Wyzwanie dla regresji
      • Definicja problemu
      • Dane historyczne
      • Inżynieria cech w strumieniowym przetwarzaniu danych
    • Regresja liniowa
      • Prosta regresja liniowa
      • Ewaluacja regresorów
      • Regresja wielomianowa
      • Wykorzystanie algorytmu regresji liniowej do wyzwania dla regresji
      • Kiedy używa się regresji liniowej?
      • Wady regresji liniowej
      • Algorytm drzewa regresji
      • Wykorzystanie drzewa regresji do wyzwania dla regresji
      • Regresyjny algorytm wzmocnienia gradientowego
      • Wykorzystanie algorytmu wzmocnienia gradientowego do wyzwania dla regresji
    • Zwycięzcą wśród algorytmów regresji jest.
    • Praktyczny przykład: jak przewidywać pogodę
    • Podsumowanie
  • Rozdział 8. Algorytmy sieci neuronowych
    • Wprowadzenie do sieci neuronowych
      • Tło historyczne
      • Początki sztucznej inteligencji
    • Sieci neuronowe
      • Perceptrony
      • Intuicyjne rozumienie sieci neuronowych
      • Warstwowe architektury uczenia głębokiego
    • Trenowanie sieci neuronowej
    • Anatomia sieci neuronowej
    • Definicja gradientu prostego
    • Funkcje aktywacji
      • Funkcja kroku
      • Funkcja sigmoidalna
      • Jednostronnie obcięta funkcja liniowa (funkcja ReLU)
      • Tangens hiperboliczny (tanh)
      • Znormalizowana funkcja wykładnicza (funkcja softmax)
    • Narzędzia i modele
      • Keras
    • Wybór pomiędzy modelem sekwencyjnym a funkcjonalnym
      • TensorFlow
      • Podstawowe pojęcia TensorFlow
      • Matematyka tensorów
    • Rodzaje sieci neuronowych
      • Sieć konwolucyjna
      • Generatywne sieci przeciwstawne
    • Uczenie transferowe
    • Studium przypadku - użycie uczenia głębokiego do wykrywania oszustw
      • Metodyka
    • Podsumowanie
  • Rozdział 9. Algorytmy nienadzorowanego języka naturalnego
    • Wprowadzenie do przetwarzania języka naturalnego
    • Terminologia przetwarzania języka naturalnego
      • Wstępne przetwarzanie tekstu w NLP
    • Czyszczenie danych przy użyciu Pythona
    • Macierz słowo - dokument
      • Macierz TF-IDF
      • Podsumowanie i omówienie wyników
    • Wprowadzenie do wektorów słów
    • Implementacja osadzania słów za pomocą metody Word2Vec
      • Interpretowanie wartości podobieństwa
      • Zalety i wady Word2Vec
    • Studium przypadku - analiza sentymentu w recenzjach restauracji
      • Import potrzebnych bibliotek i załadowanie zbioru danych
      • Budowa czystego korpusu - wstępne przetwarzanie danych
      • Konwersja danych tekstowych na cechy numeryczne
      • Analiza wyników
    • Zastosowania NLP
    • Podsumowanie
  • Rozdział 10. Modele sekwencyjne
    • Ewolucja zaawansowanych technik modelowania sekwencyjnego
    • Autokodery
      • Kodowanie automatycznego kodera
      • Przygotowanie środowiska
    • Model Seq2Seq
      • Koder
      • Wektor myśli
      • Dekoder
      • Tokeny specjalne w Seq2Seq
      • Dylemat informacyjnego wąskiego gardła
    • Mechanizm atencji
      • Czym jest atencja w sieciach neuronowych
      • Trzy kluczowe aspekty mechanizmów atencji
      • Mechanizmy atencji - szczegóły
      • Ograniczenia mechanizmów atencji
    • Samouwaga
      • Wagi atencji
      • Koder - dwukierunkowe sieci RNN
      • Wektor myśli
      • Dekoder - zwykłe sieci RNN
      • Szkolenie a inferencja
    • Transformatory - kolejny po samouwadze etap ewolucji sieci neuronowych
      • Jakie są największe zalety transformatorów
      • Analiza kodu w Pythonie
      • Interpretacja wyników
    • Duże modele językowe
      • Atencja w modelach LLM
      • GPT i BERT - najbardziej znane modele NLP
      • Tworzenie zaawansowanych modeli LLM przy użyciu głębokich i szerokich modeli
    • Bottom of Form
    • Podsumowanie
  • Rozdział 11. Zaawansowane modelowanie sekwencyjne
    • Ewolucja zaawansowanych technik modelowania sekwencyjnego
    • Autokodery
      • Kodowanie automatycznego kodera
      • Przygotowanie środowiska
    • Model Seq2Seq
      • Koder
      • Wektor myśli
      • Dekoder
      • Tokeny specjalne w Seq2Seq
      • Dylemat informacyjnego wąskiego gardła
    • Mechanizm atencji
      • Czym jest atencja w sieciach neuronowych
      • Trzy kluczowe aspekty mechanizmów atencji
      • Mechanizmy atencji - szczegóły
      • Ograniczenia mechanizmów atencji
    • Samouwaga
      • Wagi atencji
      • Koder - dwukierunkowe sieci RNN
      • Wektor myśli
      • Dekoder - zwykłe sieci RNN
      • Szkolenie a inferencja
    • Transformatory - kolejny po samouwadze etap ewolucji sieci neuronowych
      • Jakie są największe zalety transformatorów
      • Analiza kodu w Pythonie
      • Interpretacja wyników
    • Duże modele językowe
      • Atencja w modelach LLM
      • GPT i BERT - najbardziej znane modele NLP
      • Tworzenie zaawansowanych modeli LLM przy użyciu głębokich i szerokich modeli
    • Bottom of Form
    • Podsumowanie

Część 3. Zagadnienia zaawansowane

  • Rozdział 12. Systemy rekomendacji
    • Wprowadzenie do systemów rekomendacji
    • Typy systemów rekomendacji
      • Systemy rekomendacji oparte na treści
      • Systemy rekomendacji oparte na filtrowaniu kooperacyjnym
      • Hybrydowe systemy rekomendacji
    • Ograniczenia systemów rekomendacji
      • Zimny start
      • Wymagania dotyczące metadanych
      • Problem rzadkości danych
      • Obosieczny miecz wpływu społecznościowego w systemach rekomendacji
    • Obszary praktycznych zastosowań
      • Mistrzowskie wykorzystanie rekomendacji opartych na danych przez Netfliksa
      • Ewolucja systemu rekomendacji Amazona
    • Przykład praktyczny - tworzenie systemu rekomendacji
      • 1. Przygotowanie środowiska
      • 2. Ładowanie danych - recenzji i tytułów
      • 3. Połączenie danych - tworzenie kompletnego widoku
      • 4. Analiza opisowa - wyciąganie wniosków na podstawie ocen
      • 5. Przygotowanie do generowania rekomendacji - tworzenie macierzy
      • 6. Testowanie systemu - rekomendowanie filmów
    • Podsumowanie
  • Rozdział 13. Algorytmiczne przetwarzanie danych
    • Wprowadzenie do algorytmów danych
      • Twierdzenie CAP w kontekście algorytmów danych
      • Przechowywanie danych w systemach rozproszonych
      • Twierdzenie CAP i kompresja danych
    • Twierdzenie CAP
      • Systemy CA
      • Systemy AP
      • Systemy CP
    • Algorytmy kompresji danych
      • Techniki kompresji bezstratnej
    • Praktyczny przykład - zarządzenie danymi w AWS, czyli koncentracja na twierdzeniu CAP i algorytmach kompresji
      • 1. Zastosowanie twierdzenia CAP
      • 2. Algorytmy kompresji
      • 3. Ocena korzyści
    • Podsumowanie
  • Rozdział 14. Kryptografia
    • Wprowadzenie do kryptografii
      • Waga najsłabszego ogniwa
      • Terminologia
      • Wymagania bezpieczeństwa
      • Podstawy projektowania szyfrów
    • Rodzaje technik kryptograficznych
      • Kryptograficzna funkcja skrótu
      • Szyfrowanie symetryczne
      • Szyfrowanie asymetryczne
    • Przykład - kwestie bezpieczeństwa we wdrażaniu modelu uczenia maszynowego
      • Atak man-in-the-middle
      • Obrona przed techniką masquerading
      • Szyfrowanie danych i modelu
    • Podsumowanie
  • Rozdział 15. Algorytmy przetwarzania danych w dużej skali
    • Wprowadzenie do algorytmów wielkoskalowych
    • Charakterystyka wydajnej infrastruktury dla algorytmów wielkoskalowych
      • Elastyczność
      • Cechy dobrze zaprojektowanego algorytmu wielkoskalowego
    • Strategia przetwarzania przez wiele zasobów
    • Teoretyczne możliwości przetwarzania równoległego
      • Prawo Amdahla
      • Wyprowadzanie prawa Amdahla
      • CUDA - wykorzystanie architektury GPU do przetwarzania równoległego
      • Przetwarzanie klastrowe przy użyciu Apache Spark
    • Jak Apache Spark wspomaga wykonywanie algorytmów wielkoskalowych
      • Przetwarzanie rozproszone
      • Przetwarzanie w pamięci
    • Algorytmy wielkoskalowe w przetwarzaniu chmurowym
      • Przykład
    • Podsumowanie
  • Rozdział 16. Uwagi praktyczne
    • Problemy dotyczące rozwiązań algorytmicznych
      • Oczekiwać nieoczekiwanego
    • Porażka bota sztucznej inteligencji Twittera
    • Transparentność algorytmu
      • Algorytmy uczenia maszynowego i transparentność
    • Etyka i algorytmy
      • Problemy z algorytmami uczącymi się
      • Znaczenie kwestii etycznych
      • Czynniki wpływające na rozwiązania algorytmiczne
    • Ograniczanie stronniczości modeli
    • Kiedy używać algorytmów
      • Zdarzenia według teorii czarnego łabędzia i ich wpływ na algorytmy
    • Podsumowanie
  • Title: 50 algorytmów, które powinien znać każdy programista. Klasyczne i nowoczesne algorytmy z dziedzin uczenia maszynowego, projektowania oprogramowania, systemów danych i kryptografii. Wydanie II
  • Author: Imran Ahmad
  • Original title: 50 Algorithms Every Programmer Should Know: Tackle computer science challenges with classic to modern algorithms in machine learning, software design, data systems, and cryptography, 2nd Edition
  • Translation: Łukasz Piwko, Katarzyna Bogusławska
  • ISBN: 978-83-289-1110-9, 9788328911109
  • Date of issue: 2024-10-01
  • Format: Ebook
  • Item ID: 50alg2
  • Publisher: Helion