reklama - zainteresowany?

Podstawy algorytmów z przykładami w C++ - Helion

Podstawy algorytmów z przykładami w C++
Autor: Richard Neapolitan, Kumarss Naimipour
Tytuł oryginału: Foundations of Algorithms. Using C++ Pseudocode
Tłumaczenie: Bartłomiej Garbacz, Paweł Gonera, Artur Szczepaniak, Mikołaj Szczepaniak
ISBN: 83-7361-429-X
stron: 648, Format: B5, okładka: twarda
Data wydania: 2004-06-07
Księgarnia: Helion

Cena książki: 69,90 zł

Dodaj do koszyka Podstawy algorytmów z przykładami w C++

Tagi: C++ - Programowanie | Techniki programowania

Algorytmy są jednym z fundamentów programowania. Prawidłowo zaprojektowany algorytm jest podstawą efektywnego i niezawodnego programu. Opisanie problemu w postaci algorytmu nie jest prostym zadaniem -- wymaga wiedzy z zakresu matematyki, umiejętności oceny złożoności obliczeniowej i znajomości zasad optymalizacji obliczeń. Istnieje wiele metod projektowania algorytmów. Znajomość tych metod znacznie ułatwia analizę zagadnienia i przedstawienie go w postaci zalgorytmizowanej.

Książka "Podstawy algorytmów z przykładami w C++" to kompletny podręcznik poświęcony tym właśnie zagadnieniom. Przedstawia sposoby podejścia do rozwiązywania zagadnień projektowych, udowadnia, że sporo z nich można zrealizować różnymi metodami, a także uczy, jak dobrać właściwą metodę do postawionego problemu. Materiał podzielony jest na wykłady, zilustrowane pseudokodem przypominającym język C++, co bardzo ułatwia zastosowanie poznanej wiedzy w praktyce.

  • Wprowadzenie do projektowania algorytmów
  • Zastosowanie techniki dziel i zwyciężaj
  • Algorytmy programowania dynamicznego
  • Analiza złożoności obliczeniowej algorytmów na przykładzie algorytmów sortowania i przeszukiwania
  • Algorytmy z zakresu teorii liczb
  • Algorytmy kompresji danych i kryptografii
  • Programowanie równoległe

Wykłady poświęcone algorytmom są uzupełnione dodatkami, zawierającymi kompendium niezbędnej wiedzy z dziedziny matematyki, technik rekurencyjnych i algebry zbiorów.

"Podstawy algorytmów z przykładami w C++" to doskonały podręcznik dla uczniów, studentów i wszystkich, którzy chcą poznać tę dziedzinę wiedzy.

Dodaj do koszyka Podstawy algorytmów z przykładami w C++

Dodaj do koszyka Podstawy algorytmów z przykładami w C++

Spis treści

Podstawy algorytmów z przykładami w C++ -- spis treści

O Autorach (9)

Przedmowa (11)

Rozdział 1. Algorytmy - wydajność, analiza i rząd (17)

  • 1.1. Algorytmy (18)
  • 1.2. Znaczenie opracowywania wydajnych algorytmów (25)
    • 1.2.1. Wyszukiwanie sekwencyjne a wyszukiwanie binarne (26)
    • 1.2.2. Ciąg Fibonacciego (28)
  • 1.3. Analiza algorytmów (33)
    • 1.3.1. Analiza złożoności (33)
    • 1.3.2. Zastosowanie teorii (41)
    • 1.3.3. Analiza poprawności (42)
  • 1.4. Rząd (42)
    • 1.4.1. Intuicyjne wprowadzenie do problematyki rzędu (43)
    • 1.4.2. Formalne wprowadzenie do problematyki rzędu (45)
    • 1.4.3. Wykorzystanie granic do określenia rzędu (56)
  • 1.5. Zarys dalszej treści książki (59)
  • Ćwiczenia (60)

Rozdział 2. Dziel i zwyciężaj (65)

  • 2.1. Wyszukiwanie binarne (66)
  • 2.2. Sortowanie przez scalanie (71)
  • 2.3. Podejście typu dziel i zwyciężaj (77)
  • 2.4. Sortowanie szybkie (sortowanie przez podstawienie podziałów) (78)
  • 2.5. Algorytm Strassena mnożenia macierzy (85)
  • 2.6. Arytmetyka wielkich liczb całkowitych (90)
    • 2.6.1. Reprezentacja wielkich liczb całkowitych: dodawanie i inne operacje wykonywane w czasie liniowym (91)
    • 2.6.2. Mnożenie wielkich liczb całkowitych (91)
  • 2.7. Określanie wartości progowych (97)
  • 2.8. Przeciwwskazania do używania podejścia dziel i zwyciężaj (101)
  • Ćwiczenia (103)

Rozdział 3. Programowanie dynamiczne (111)

  • 3.1. Współczynnik dwumianowy (112)
  • 3.2. Algorytm Floyda określania najkrótszej drogi w grafie (117)
  • 3.3. Programowanie dynamiczne a problemy optymalizacyjne (125)
  • 3.4. Łańcuchowe mnożenie macierzy (127)
  • 3.5. Optymalne drzewa wyszukiwania binarnego (136)
  • 3.6. Problem komiwojażera (145)
  • Ćwiczenia (152)

Rozdział 4. Podejście zachłanne (157)

  • 4.1. Minimalne drzewo rozpinające (161)
    • 4.1.1. Algorytm Prima (163)
    • 4.1.2. Algorytm Kruskala (169)
    • 4.1.3. Porównanie algorytmu Prima z algorytmem Kruskala (173)
    • 4.1.4. Dyskusja końcowa (173)
  • 4.2. Algorytm Dijkstry najkrótszych dróg z jednego źródła (174)
  • 4.3. Szeregowanie (177)
    • 4.3.1. Minimalizacja całkowitego czasu w systemie (178)
    • 4.3.2. Szeregowanie z terminami granicznymi (180)
  • 4.4. Kod Huffmana (188)
    • 4.4.1. Kody prefiksowe (189)
    • 4.4.2. Algorytm Huffmana (190)
  • 4.5. Podejście zachłanne a programowanie dynamiczne: problem plecakowy (194)
    • 4.5.1. Podejście zachłanne do problemu plecakowego 0-1 (195)
    • 4.5.2. Podejście zachłanne do ułamkowego problemu plecakowego (196)
    • 4.5.3. Podejście programowania dynamicznego do problemu plecakowego 0-1 (197)
    • 4.5.4. Poprawiona wersja algorytmu programowania dynamicznego dla problemu plecakowego 0-1 (197)
  • Ćwiczenia (201)

Rozdział 5. Algorytmy z powrotami (207)

  • 5.1. Techniki algorytmów z powrotami (208)
  • 5.2. Problem n-królowych (215)
  • 5.3. Zastosowanie algorytmu Monte Carlo do oszacowania wydajności algorytmu z powrotami (219)
  • 5.4. Problem sumy podzbiorów (223)
  • 5.5. Kolorowanie grafu (228)
  • 5.6. Problem cyklu Hamiltona (232)
  • 5.7. Problem plecakowy 0-1 (235)
    • 5.7.1. Algorytm z powrotami dla problemu plecakowego 0-1 (235)
    • 5.7.2. Porównanie algorytmu programowania dynamicznego z algorytmem z powrotami do rozwiązywania problemu plecakowego 0-1 (244)
  • Ćwiczenia (245)

Rozdział 6. Metoda podziału i ograniczeń (251)

  • 6.1. Ilustracja metody podziału i ograniczeń dla problemu plecakowego 0-1 (253)
    • 6.1.1. Przeszukiwanie wszerz z przycinaniem metodą podziału i ograniczeń (253)
    • 6.1.2. Przeszukiwanie typu najpierw najlepszy z przycinaniem metodą podziału i ograniczeń (258)
  • 6.2. Problem komiwojażera (264)
  • 6.3. Wnioskowanie abdukcyjne (diagnozowanie) (272)
  • Ćwiczenia (281)

Rozdział 7. Wprowadzenie do złożoności obliczeniowej: problem sortowania (285)

  • 7.1. Złożoność obliczeniowa (286)
  • 7.2. Sortowanie przez wstawianie i sortowanie przez wybieranie (288)
  • 7.3. Dolne ograniczenia dla algorytmów usuwających co najwyżej jedną inwersję dla jednej operacji porównania (294)
  • 7.4. Przypomnienie algorytmu sortowania przez scalanie (297)
  • 7.5. Przypomnienie algorytmu szybkiego sortowania (303)
  • 7.6. Sortowanie stogowe (305)
    • 7.6.1. Stogi i podstawowe na nich operacje (305)
    • 7.6.2. Implementacja algorytmu sortowania stogowego (309)
  • 7.7. Zestawienie algorytmów sortowania przez scalanie, sortowania szybkiego i sortowania stogowego (316)
  • 7.8. Dolne ograniczenia dla algorytmów sortujących wyłącznie na podstawie operacji porównania kluczy (317)
    • 7.8.1. Drzewa decyzyjne dla algorytmów sortujących (317)
    • 7.8.2. Dolne ograniczenia dla najgorszego przypadku (320)
    • 7.8.3. Dolne ograniczenia dla średniego przypadku (323)
  • 7.9. Sortowanie przez podział (sortowanie pozycyjne) (328)
  • Ćwiczenia (332)

Rozdział 8. Więcej o złożoności obliczeniowej: problem przeszukiwania (339)

  • 8.1. Dolne ograniczenia dla przeszukiwania wyłącznie na podstawie porównywania wartości kluczy (340)
    • 8.1.1. Dolne ograniczenia dla najgorszego przypadku (343)
    • 8.1.2. Dolne ograniczenia dla średniego przypadku (345)
  • 8.2. Przeszukiwanie przez interpolację (351)
  • 8.3. Przeszukiwanie w drzewach (354)
    • 8.3.1. Drzewa wyszukiwania binarnego (355)
    • 8.3.2. B-drzewa (360)
  • 8.4. Mieszanie (361)
  • 8.5. Problem wyboru: wprowadzenie metody dyskusji z adwersarzem (367)
    • 8.5.1. Znajdowanie największego klucza (367)
    • 8.5.2. Znajdowanie zarówno najmniejszego, jak i największego klucza (369)
    • 8.5.3. Znajdowanie drugiego największego klucza (376)
    • 8.5.4. Znajdowanie k-tego najmniejszego klucza (381)
    • 8.5.5. Algorytm probabilistyczny dla problemu wyboru (390)
  • Ćwiczenia (395)

Rozdział 9. Złożoność obliczeniowa i trudność problemów: wprowadzenie do teorii o zbiorze NP (401)

  • 9.1. Trudność (402)
  • 9.2. Ponowne omówienie zagadnienia rozmiaru danych wejściowych (404)
  • 9.3. Trzy główne kategorie problemów (409)
    • 9.3.1. Problemy, dla których wynaleziono algorytmy wielomianowe (409)
    • 9.3.2. Problemy, których trudność została udowodniona (410)
    • 9.3.3. Problemy, których trudność nie została udowodniona, jednak nie udało się znaleźć rozwiązujących je algorytmów wielomianowych (411)
  • 9.4. Teoria o zbiorze NP (411)
    • 9.4.1. Zbiory P i NP (414)
    • 9.4.2. Problemy NP-zupełne (419)
    • 9.4.3. Problemy NP-trudne, NP-łatwe i NP-równoważne (431)
  • 9.5. Sposoby rozwiązywania problemów NP-trudnych (435)
    • 9.5.1. Algorytm przybliżony dla problemu komiwojażera (436)
    • 9.5.2. Przybliżony algorytm dla problemu pakowania (441)
  • Ćwiczenia (446)

Rozdział 10. Algorytmy teorii liczb (449)

  • 10.1. Przegląd teorii liczb (450)
    • 10.1.1. Liczby złożone i liczby pierwsze (450)
    • 10.1.2. Największy wspólny dzielnik (451)
    • 10.1.3. Rozkładanie liczb całkowitych na czynniki pierwsze (455)
    • 10.1.4. Najmniejsza wspólna wielokrotność (457)
  • 10.2. Wyznaczanie największego wspólnego dzielnika (457)
    • 10.2.1. Algorytm Euklidesa (458)
    • 10.2.2. Rozszerzenie algorytmu Euklidesa (462)
  • 10.3. Przegląd arytmetyki modularnej (465)
    • 10.3.1. Teoria grup (465)
    • 10.3.2. Kongruencja modulo n (467)
    • 10.3.3. Podgrupy (473)
  • (10.4. Rozwiązywanie modularnych równań liniowych 479)
  • (10.5. Obliczanie modularnych potęg 485)
  • 10.6. Znajdowanie wielkich liczb pierwszych (488)
    • 10.6.1. Szukanie liczby pierwszej (488)
    • (10.6.2. Sprawdzanie, czy dana liczba całkowita jest liczbą pierwszą 489)
  • 10.7. System szyfrowania RSA z publicznym kluczem (508)
    • 10.7.1. Systemy szyfrowania z kluczem publicznym (508)
    • 10.7.2. System szyfrowania RSA (509)
  • Ćwiczenia (512)

Rozdział 11. Wprowadzenie do algorytmów równoległych (517)

  • 11.1. Architektury równoległe (521)
    • 11.1.1. Mechanizm sterowania (521)
    • 11.1.2. Organizacja przestrzeni adresowej (522)
    • 11.1.3. Sieci łączące (524)
  • 11.2. Model PRAM (527)
    • 11.2.1. Projektowanie algorytmów dla modelu CREW PRAM (531)
    • 11.2.2. Projektowanie algorytmów dla modelu CRCW PRAM (538)
  • Ćwiczenia (541)

Dodatek A Przegląd niezbędnej wiedzy matematycznej (543)

  • A.1. Notacja (543)
  • A.2. Funkcje (545)
  • A.3. Indukcja matematyczna (546)
  • A.4. Twierdzenia i lematy (553)
  • A.5. Logarytmy (554)
    • A.5.1. Definicja i właściwości logarytmów (554)
    • A.5.2. Logarytm naturalny (557)
  • A.6. Zbiory (559)
  • A.7. Permutacje i kombinacje (560)
  • A.8. Prawdopodobieństwo (563)
    • A.8.1. Losowość (569)
    • A.8.2. Wartość oczekiwana (573)
  • Ćwiczenia (575)

Dodatek B Rozwiązywanie równań rekurencyjnych na potrzeby analizy algorytmów rekurencyjnych (581)

  • B.1. Rozwiązywanie rekurencji za pomocą indukcji (581)
  • B.2. Rozwiązywanie rekurencji z zastosowaniem równań charakterystycznych (585)
    • B.2.1. Homogeniczna rekurencja liniowa (585)
    • B.2.2. Niehomogeniczna rekurencja liniowa (594)
    • B.2.3. Zamiana zmiennej (przekształcenie dziedziny) (600)
  • B.3. Rozwiązywanie rekurencji przez podstawianie (603)
  • B.4. Rozszerzanie wyników dla n będącego potęgą dodatniej stałej b do wyników dla dowolnego n (605)
  • B.5. Dowody twierdzeń (611)
  • Ćwiczenia (614)

Dodatek C Struktury danych dla zbiorów rozłącznych (621)

Dodatek D Bibliografia (631)

Skorowidz (637)

Dodaj do koszyka Podstawy algorytmów z przykładami w C++

Code, Publish & WebDesing by CATALIST.com.pl



(c) 2005-2024 CATALIST agencja interaktywna, znaki firmowe należą do wydawnictwa Helion S.A.