My - Helion
ebook
Autor: Daniel ZingaroTytuł oryginału: Algorithmic Thinking: A Problem-Based Introduction
Tłumaczenie: Piotr Rajca
ISBN: 978-83-283-8336-4
stron: 456, Format: ebook
Data wydania: 2022-06-01
Księgarnia: Helion
Cena książki: 44,50 zł (poprzednio: 89,00 zł)
Oszczędzasz: 50% (-44,50 zł)
Osoby które kupowały "My", wybierały także:
- Algorytmy kryptograficzne. Przewodnik po algorytmach w blockchain, kryptografii kwantowej, protoko 79,00 zł, (39,50 zł -50%)
- Informatyk samouk. Przewodnik po strukturach danych i algorytmach dla pocz 58,98 zł, (29,49 zł -50%)
- Nauka algorytm 58,98 zł, (29,49 zł -50%)
- 40 algorytmów, które powinien znać każdy programista. Nauka implementacji algorytmów w Pythonie 77,00 zł, (38,50 zł -50%)
- Komputer kwantowy. Programowanie, algorytmy, kod 67,00 zł, (33,50 zł -50%)
Spis treści
Myślenie algorytmiczne. Jak rozwiązywać problemy za pomocą algorytmów eBook -- spis treści
Przedmowa
Podziękowania
Wprowadzenie
- Zasoby internetowe
- Dla kogo jest przeznaczona ta książka
- Język programowania
- Dlaczego wybrałem język C?
- Słowo kluczowe static
- Pliki nagłówkowe
- Zwalnianie pamięci
- Zagadnienia
- Witryny oceniające
- Anatomia opisu problemu
- Problem: Kolejki po jedzenie
- Problem
- Rozwiązanie problemu
- Uwagi
1. Tablice mieszające
- Problem 1. Płatki śniegu
- Problem
- Uproszczenie problemu
- Rozwiązywanie podstawowego problemu
- Rozwiązanie 1. Porównywanie parami
- Rozwiązanie 2. Zmniejszenie liczby wykonywanych operacji
- Tablice mieszające
- Projekt tablicy mieszającej
- Dlaczego warto używać tablic mieszających?
- Problem 2. Słowa złożone
- Problem
- Wskazywanie słów złożonych
- Rozwiązanie
- Problem 3. Sprawdzanie pisowni - usuwanie litery
- Problem
- Rozważania o zastosowaniu tablic mieszających
- Rozwiązanie doraźne
- Podsumowanie
- Uwagi
2. Drzewa i rekurencja
- Problem 1. Halloweenowy łup
- Problem
- Drzewa binarne
- Rozwiązywanie problemu dla przykładowego drzewa
- Reprezentacja drzew binarnych
- Zbieranie wszystkich cukierków
- Zupełnie inne rozwiązanie
- Przechodzenie minimalnej liczby ulic
- Odczyt danych wejściowych
- Dlaczego korzystać z rekurencji?
- Problem 2. Odległość pomiędzy potomkami
- Problem
- Odczyt danych wejściowych
- Liczba potomków w odległości d od wierzchołka
- Liczba potomków dla wszystkich wierzchołków
- Sortowanie wierzchołków
- Wyświetlanie wyników
- Funkcja main
- Podsumowanie
- Uwagi
3. Memoizacja i programowanie dynamiczne
- Problem 1. Burgerowa gorączka
- Problem
- Określenie planu rozwiązania problemu
- Określanie optymalnego rozwiązania
- Rozwiązanie 1. Zastosowanie rekurencji
- Rozwiązanie 2. Memoizacja
- Rozwiązanie 3. Programowanie dynamiczne
- Memoizacja i programowanie dynamiczne
- Krok 1. Struktura optymalnego rozwiązania
- Krok 2. Rozwiązanie rekurencyjne
- Krok 3. Memoizacja
- Krok 4. Programowanie dynamiczne
- Problem 2. Skąpcy
- Problem
- Określanie optymalnego rozwiązania
- Rozwiązanie 1. Rekurencja
- Funkcja main
- Rozwiązanie 2. Memoizacja
- Problem 3. Rywalizacja hokejowa
- Problem
- Rozważania dotyczące rywalizacji
- Określenie optymalnego rozwiązania
- Rozwiązanie 1. Rekurencja
- Rozwiązanie 2. Memoizacja
- Rozwiązanie 3. Programowanie dynamiczne
- Optymalizacja zużycia pamięci
- Problem 4. Sposoby zaliczenia
- Problem
- Rozwiązanie: memoizacja
- Podsumowanie
- Uwagi
4. Grafy i przeszukiwanie wszerz
- Problem 1. Pogoń skoczka
- Problem
- Optymalne ruchy skoczka
- Najlepszy wynik skoczka
- Przesunięcie i powrót skoczka
- Optymalizacja czasu działania
- Grafy i przeszukiwanie wszerz
- Czym są grafy?
- Grafy a drzewa
- Algorytm BFS na grafach
- Problem 2. Wspinaczka po linie
- Problem
- Rozwiązanie 1. Poszukiwanie ruchów
- Rozwiązanie 2. Nowy model
- Problem 3. Tłumaczenie książek
- Problem
- Budowanie grafu
- Implementacja algorytmu BFS
- Koszt całkowity
- Podsumowanie
- Uwagi
5. Najkrótsze ścieżki na grafach ważonych
- Problem 1. Myszy w labiryncie
- Problem
- Zostawiamy algorytm BFS
- Najkrótsze ścieżki na grafach ważonych
- Tworzenie grafu
- Implementacja algorytmu Dijkstry
- Dwie optymalizacje
- Algorytm Dijkstry
- Efektywność działania algorytmu Dijkstry
- Krawędzie o wagach ujemnych
- Problem 2. Planowanie odwiedzin u babci
- Problem
- Macierz sąsiedztwa
- Konstruowanie grafu
- Dziwaczne ścieżki
- Zadanie 1. Najkrótsze ścieżki
- Zadanie 2. Liczba najkrótszych ścieżek
- Podsumowanie
- Uwagi
6. Wyszukiwanie binarne
- Problem 1. Karmienie mrówek
- Problem
- Nowy rodzaj problemów z drzewami
- Wczytywanie danych wejściowych
- Sprawdzanie wykonalności
- Poszukiwanie rozwiązania
- Wyszukiwanie binarne
- Wydajność działania algorytmu wyszukiwania binarnego
- Określanie wykonalności
- Przeszukiwanie tablicy posortowanej
- Problem 2. Skok przez rzekę
- Problem
- Koncepcja zachłanności
- Testowanie wykonalności
- Poszukiwanie rozwiązania
- Wczytywanie danych wejściowych
- Problem 3. Jakość życia
- Problem
- Sortowanie wszystkich prostokątów
- Wyszukiwanie binarne
- Sprawdzanie wykonalności
- Szybsze sprawdzanie wykonalności
- Problem 4. Drzwi w jaskini
- Problem
- Rozwiązywanie podzadań
- Zastosowanie wyszukiwania liniowego
- Stosowanie wyszukiwania binarnego
- Podsumowanie
- Uwagi
7. Kopce i drzewa segmentów
- Problem 1. Promocja w supermarkecie
- Problem
- Rozwiązanie 1. Wartość maksymalna i minimalna w tablicy
- Kopce maksymalne
- Kopce minimalne
- Rozwiązanie 2. Kopce
- Kopce
- Inne zastosowania
- Wybór struktury danych
- Problem 2. Budowanie drzewców
- Problem
- Rekurencyjne wyświetlanie drzewców
- Sortowanie na podstawie etykiet
- Rozwiązanie 1. Rekurencja
- Pytania o sumę zakresu
- Drzewa segmentów
- Rozwiązanie 2. Drzewa segmentów
- Drzewa segmentów
- Problem 3. Suma dwóch
- Problem
- Wypełnianie drzewa segmentów
- Znajdowanie odpowiedzi z użyciem drzewa segmentów
- Aktualizacja drzewa segmentów
- Funkcja main
- Podsumowanie
- Uwagi
8. Struktura zbiorów rozłącznych
- Problem 1. Sieć społecznościowa
- Problem
- Modelowanie danych w formie grafu
- Rozwiązanie 1. BFS
- Struktura zbiorów rozłącznych
- Rozwiązanie 2. Struktura zbiorów rozłącznych
- Optymalizacja 1. Łączenie na podstawie wielkości
- Optymalizacja 2. Skracanie ścieżek
- Struktura zbiorów rozłącznych
- Relacje: Trzy wymagania
- Wybieranie struktury zbiorów rozłącznych
- Optymalizacje
- Problem 2. Przyjaciele i wrogowie
- Problem
- Rozszerzenie: wrogowie
- Funkcja main
- Operacje find i union
- Operacje UstawJakoPrzyjaciół i UstawJakoWrogów
- Operacje CzySąPrzyjaciółmi i CzySąWrogami
- Problem 3. Kłopot z szufladami
- Problem
- Równoważne szuflady
- Funkcja main
- Implementacja operacji find i union
- Podsumowanie
- Uwagi
Podsumowanie
A. Efektywność algorytmów
- Kwestia czasu. i nie tylko
- Notacja dużego O
- Czas liniowy
- Czas stały
- Inny przykład
- Czas kwadratowy
- Notacja dużego O w tej książce
B. Ponieważ nie mogłem się powstrzymać
- Płatki śniegu: niejawne listy połączone
- Burgerowa gorączka: rekonstrukcja rozwiązania
- Pogoń skoczka: kodowanie ruchów
- Algorytm Dijkstry: stosowanie kopca
- Myszy w labiryncie: śledzenie z użyciem kopców
- Myszy w labiryncie: implementacja z użyciem kopca
- Skracanie skracania ścieżek
- Krok 1. Żadnych więcej operatorów trójargumentowych
- Krok 2. Bardziej czytelne operatory przypisania
- Krok 3. Wyjaśnienie rekurencji
C. Z podziękowaniem za problemy