Description
Algorytmy i struktury danych – szybko, łatwo, skutecznie!Poznaj najważniejsze algorytmy i techniki programistyczneNaucz się skutecznie wykorzystywać typy i struktury danychDowiedz się, jak w praktyce zastosować zdobytą wiedzęAlgorytmika to dziedzina, która w ciągu ostatnich kilkudziesięciu lat dostarczyła wielu efektywnych narzędzi wspomagających rozwiązywanie różnorodnych zagadnień za pomocą komputera. Dla niektórych stanowi swego rodzaju książkę kucharską, do której sięgają jedynie po wybrane przepisy, a dla innych – pole do rozwinięcia umiejętności skutecznego rozwiązywania problemów i szkołę niestandardowego myślenia. Niezależnie od podejścia jest to dziedzina, z którą wypada się zapoznać, jeśli ma się ambicję zostać zawodowym programistą lub po prostu być osobą nowoczesną i wszechstronnie wykształconą.Ten przewodnik prezentuje szerokie spektrum zagadnień algorytmicznych, najważniejsze informacje na temat struktur danych, technik rekurencyjnych i złożonych metod algorytmicznych. Teoria jest tu poparta przykładowymi programami napisanymi w języku C++, łatwymi do analizy i skompilowania z wykorzystaniem standardowych narzędzi. Autor nie poprzestaje na suchym kodzie, lecz stara się przedstawić praktyczne zastosowanie opisywanych rozwiązań. Podręcznik przyda się zarówno osobom niemającym solidnych podstaw teoretycznych, jak i specjalistom, którzy zawodowo zajmują się programowaniem. Nowe wydanie zostało gruntownie odświeżone i poprawione, a listingi dostosowane do wymagań najnowszych kompilatorów. Książka zawiera opis zasad kompilacji dla środowiska Visual Studio 2017 i kilku wybranych środowisk używających GNU C++ (Dev-C++ i Cygwin).Historia algorytmikiMechanizm rekurencjiSystemy liczbowe i kodowanieTypy i struktury danychAnaliza złożoności algorytmówDerekursywacja algorytmówOptymalizacja algorytmówAlgorytmy sortowania i wyszukiwaniaElementy algorytmiki grafówSztuczna inteligencjaSzyfrowanie i kompresja danychBiblioteka STLJedyny podręcznik do algorytmiki, którego będziesz potrzebować!Spis treści:Przedmowa 9Uwagi do wydania VI 9Co odróżnia tę książkę od innych podręczników? 10Dlaczego C++? 11Jak należy czytać tę książkę? 11Co zostało opisane w tej książce? 12Programy przykładowe 14Konwencje typograficzne i oznaczenia 15Rozdział 1. Zanim wystartujemy 17Czym powinien się charakteryzować algorytm? 18Jak to wcześniej bywało, czyli wyjątki z historii maszyn algorytmicznych 20- 1804 – 20- 1830 i później – 21- 1890 – 21- lata 30. XX w. – 21- lata 40. XX w. – 22- okres powojenny – 22- 1969 – 23- teraz – 23Jak to się niedawno odbyło, czyli o tym, kto „wymyślił” metodologię programowania 24Proces koncepcji programów 25Poziomy abstrakcji opisu i wybór języka 26Modelowanie działania algorytmów (maszyna Turinga) 28Poprawność algorytmów 29Zadania 31Rozwiązania i wskazówki do zadań 31Rozdział 2. Rekurencja 33Definicja rekurencji 33Ilustracja pojęcia rekurencji 35Jak wykonują się programy rekurencyjne? 36Niebezpieczeństwa rekurencji 38Ciąg Fibonacciego 38Stack overflow! 40Pułapek ciąg dalszy 42Stąd do wieczności 43Definicja poprawna, ale… 43Typy programów rekurencyjnych 45Myślenie rekurencyjne 46Przykład 1. Spirala 47Przykład 2. Kwadraty „parzyste” 48Uwagi praktyczne na temat technik rekurencyjnych 50Zadania 51Rozwiązania i wskazówki do zadań 53Rozdział 3. Systemy obliczeniowe i podstawy kodowania 59System dziesiętny i kilka definicji 60System dwójkowy 60Operacje arytmetyczne na liczbach dwójkowych 61Operacje logiczne na liczbach dwójkowych 62Kod BCD 64System ósemkowy 65System szesnastkowy 65Kodowanie liczb ze znakiem 65Kod znak-moduł (ZM) 66Kod U2 (system uzupełnienia dwójkowego) 66Zmienne w pamięci komputera 67Kodowanie znaków 68Kodowanie obrazów 70Mapy bitowe na przykładzie formatu BMP 71Rozdział 4. Typy i struktury danych 75Typy podstawowe i złożone 76Tablice 77Ciągi znaków i napisy w C++ 78Typy złożone 80Struktury i wprowadzenie pojęcia referencji 80Klasy i programowanie obiektowe 83Abstrakcyjne struktury danych 83Listy jednokierunkowe 85Tablicowa implementacja list 106Stos 111Kolejki FIFO 116Sterty i kolejki priorytetowe 119Drzewa i ich reprezentacje 125Zbiory 138STL, czyli struktury danych dla leniuchów 140Klasyczne kontenery sekwencyjne 141Adaptery (nakładki na inne kontenery) 147Kontenery asocjacyjne 148Algorytmy w STL 151Dalsze materiały na temat STL 152Zadania 152Rozwiązania zadań 153Rozdział 5. Analiza złożoności algorytmów 155Definicje i przykłady 156Jeszcze raz funkcja silnia 160Zerowanie fragmentu tablicy 163Wpadamy w pułapkę 165Różne typy złożoności obliczeniowej 166Nowe zadanie: uprościć obliczenia! 168Analiza programów rekurencyjnych 169Terminologia i definicje 169Ilustracja metody na przykładzie 170Rozkład logarytmiczny 171Przeszukiwanie binarne… tym razem bez matematyki wyższej! 173Zamiana dziedziny równania rekurencyjnego 174Funkcja Ackermanna, czyli coś dla smakoszy 174Złożoność obliczeniowa to nie religia! 176Techniki optymalizacji programów 176Zadania 177Rozwiązania i wskazówki do zadań 178Rozdział 6. Derekursywacja i optymalizacja algorytmów 181Jak pracuje kompilator? 182Odrobina formalizmu nie zaszkodzi! 184Kilka przykładów derekursywacji algorytmów 185Derekursywacja z wykorzystaniem stosu 188Eliminacja zmiennych lokalnych 188Metoda funkcji przeciwnych 190Klasyczne schematy derekursywacji 192Schemat typu while 193Schemat typu if-else 194Schemat z podwójnym wywołaniem rekurencyjnym 196Podsumowanie 198Rozdział 7. Algorytmy sortowania 199Sortowanie przez wstawianie, algorytm klasy O(N2) 200Sortowanie bąbelkowe, algorytm klasy O(N2) 201Sortowanie szybkie (Quicksort) – algorytm klasy O(N log N) 203Heapsort – sortowanie przez kopcowanie 206Scalanie zbiorów posortowanych 209Sortowanie przez scalanie, algorytm klasy O(N log N) 209Sortowanie zewnętrzne 211Uwagi praktyczne 214Rozdział 8. Algorytmy przeszukiwania 217Przeszukiwanie liniowe 217Przeszukiwanie binarne 218Transformacja kluczowa (hashing) 220W poszukiwaniu funkcji H 221Najbardziej znane funkcje H 222Obsługa konfliktów dostępu 224Powrót do źródeł 225Jeszcze raz tablice! 226Próbkowanie liniowe 226Podwójne kluczowanie 228Zastosowania transformacji kluczowej 229Podsumowanie metod transformacji kluczowej 230Rozdział 9. Przeszukiwanie tekstów 233Algorytm typu brute force 233Nowe algorytmy poszukiwań 235Algorytm KMP 236Algorytm Boyera-Moorea 240Algorytm Rabina-Karpa 242Rozdział 10. Zaawansowane techniki programowania 245Programowanie typu „dziel i zwyciężaj” 246Odszukiwanie minimum i maksimum w tablicy liczb 247Mnożenie macierzy o rozmiarze N(N 249Mnożenie liczb całkowitych 252Inne znane algorytmy „dziel i zwyciężaj” 253Algorytmy „żarłoczne”, czyli przekąsić coś nadszedł już czas… 253Problem plecakowy, czyli niełatwe jest życie turysty piechura 254Wydawanie reszty, czyli „A nie ma pan drobnych?” w praktyce 257Programowanie dynamiczne 258Ciąg Fibonacciego 259Równania z wieloma zmiennymi 260Najdłuższa wspólna podsekwencja 261Inne techniki programowania 264Uwagi bibliograficzne 266Rozdział 11. Elementy algorytmiki grafów 269Definicje i pojęcia podstawowe 270Etykiety i wartości 271Cykle w grafach 273Sposoby reprezentacji grafów 276Reprezentacja tablicowa 276Słowniki węzłów 278Listy kontra zbiory 279Podstawowe operacje na grafach 279Suma grafów 279Kompozycja grafów 280Graf do potęgi 280Algorytm Roya-Warshalla 281Algorytm Floyda-Warshalla 284Algorytm Dijkstry 287Algorytm Bellmana-Forda 289Drzewo rozpinające minimalne 289Algorytm Kruskala 290Algorytm Prima 291Przeszukiwanie grafów 291Strategia „w głąb” (przeszukiwanie zstępujące) 292Strategia „wszerz” 294Inne strategie przeszukiwania 295Problem właściwego doboru 296Podsumowanie 300Zadania 300Rozdział 12. Algorytmy numeryczne 301Poszukiwanie miejsc zerowych funkcji 301Iteracyjne obliczanie wartości funkcji 303Interpolacja funkcji metodą Lagrangea 304Różniczkowanie funkcji 305Całkowanie funkcji metodą Simpsona 307Rozwiązywanie układów równań liniowych metodą Gaussa 308Biblioteka GSL (GNU Scientific Library) 311Uwagi końcowe 311Rozdział 13. Czy komputery mogą myśleć? 313Przegląd obszarów zainteresowań sztucznej inteligencji (SI) 314Systemy eksperckie 315Sieci neuronowe 317Reprezentacja problemów 318Gry dwuosobowe i drzewa gier 320Algorytm min-max 321Rozdział 14. Kodowanie i kompresja danych 327Kodowanie danych i arytmetyka dużych liczb 329Metody prymitywne 329Kodowanie symetryczne 331Kodowanie asymetryczne 332Łamanie kodów 338Jakość klucza szyfrującego 338Metody łamania szyfrów 339Techniki kompresji danych 340Kompresja za pomocą modelowania matematycznego 341Kompresja metodą RLE 342Kompresja danych metodą Huffmana 343Kodowanie LZW 348Rozdział 15. Zadania różne 355Teksty zadań 355Rozwiązania 357Dodatek A. Poznaj C++ w pięć minut! 361Elementy języka C++ na przykładach 361Pierwszy program 361Dyrektywa #include 362Kod warunkowy w C++ 362Operacje arytmetyczne i zmienne 363Operacje logiczne 363Wskaźniki i zmienne dynamiczne 364Referencje 365Typy proste i typy złożone 365Podprogramy 367Procedury 367Funkcje 367Instrukcja wyboru (switch) 368Iteracje 369Struktury rekurencyjne 369Parametry programu main() 370Operacje na plikach w C++ 370Programowanie obiektowe w C++ 371Terminologia 372Obiekty na przykładzie 373Składowe statyczne klas 376Metody stałe klas 376Dziedziczenie własności 376Dodatek B. Kompilowanie programów przykładowych 381Zawartość archiwum ZIP na FTP-ie 381Darmowe kompilatory C++ 382GCC (GNU Compiler Collection) 382Microsoft Visual Studio Community 384macOS 386Dev-C++ (Orwell) 386Kompilacja i uruchamianie programów w C++ 387GCC 387Microsoft Visual Studio 388Dev-C++ 395Cygwin 395Literatura 397Spis ilustracji 399Spis tabel 404Skorowidz 406O autorze: Piotr Wróblewski — autor wielu książek z dziedziny informatyki. Z wydawnictwem Helion współpracuje od 1992 roku, czego wynikiem są liczne podręczniki dotyczące programowania i obsługi komputerów. Najpopularniejsze do tej pory ABC komputera i Algorytmy, struktury danych i techniki programowania doczekały się kilku wydań i cieszą się u Czytelników stałym zainteresowaniem. Ten ostatni tytuł ukazał się także za granicą.Piotr Wróblewski jest absolwentem Politechniki Śląskiej oraz francuskiej uczelni informatycznej ENSSAT (Lannion w Bretanii). Studia we Francji do tej pory wspomina jako największą przygodę swojego życia. Po powrocie do Polski zajmował się pisaniem oprogramowania na zamówienie i prowadzeniem szkoleń komputerowych. Przez kolejne dziewięć lat pracował w spółkach zagranicznych z branży IT/telekomunikacja, głównie w charakterze kierownika projektów (Impaq, Polkomtel).Już w trakcie pracy zawodowej ukończył dodatkowe studia z zarządzania i marketingu Master HEC w Szkole Biznesu Politechniki Warszawskiej. Od początku 2006 roku mieszka we Wrocławiu, gdzie pracuje w firmie Nokia – obecnie na stanowisku kierownika zespołu w dziale rozwoju oprogramowania stacji bazowych (warstwa radiowa).Pełny profil zawodowy: https://www.linkedin.com/in/pwroblewski/.
Informatyka
esesmani, budowa samochodu, najdłuższa rzeka, belvedere zakopane, wsa, made in poland, tesco sklepy, fibak, klub inteligencji katolickiej
yyyyy