100632961

Page 1


Spis treści

2.1.

2.6.

2.7..

2.8.

2.9.

2.10.

3.1.

3.2.

3.3.

(Knutha-Morrisa-Pratta)

5.1.3. Algorytm liniowy dla problemu wyszukiwania wzorca dwuwymiarowego, czyli algorytm Bakera

5.1.4. Algorytm GS′ (wersja algorytmu Galila-Seiferasa dla pewnej klasy wzorców)

5.1.5.

KMR (Karpa-Millera-Rosenberga)

5.1.6. Algorytm KR (Karpa-Rabina) ..............................

5.1.7. Algorytm BM (Boyera-Moore‘a) ...........................

5.1.8. Algorytm FP (Fishera-Patersona) ...........................

5.2. Drzewa sufiksowe i grafy podsłów ................................

5.2.1. Niezwarta reprezentacja drzewa sufiksowego

5.2.2. Tworzenie drzewa sufiksowego

5.2.3. Tworzenie grafu podsłów

5.3. Inne algorytmy tekstowe ........................................

5.3.1. Obliczanie najdłuższego wspólnego podsłowa

5.3.2. Obliczanie najdłuższego wspólnego podciągu

5.3.3. Wyszukiwanie słów podwójnych ............................

5.3.4. Wyszukiwanie słów symetrycznych

5.3.5. Równoważność cykliczna

5.3.6. Algorytm Huffmana

5.3.7. Obliczanie

7.3.

1 Podstawowe zasady analizy algorytmów

Wtym rozdziale przedstawiamy podstawowe pojęcia stosowane przy badaniu algorytmów i struktur danych. Przede wszystkim wyjaśniamy, na czym polega analiza algorytmu w dwóch głównych aspektach: poprawności semantycznej i złożoności obliczeniowej. Omawiamy elementarne struktury danych definiowane abstrakcyjnie (jako listy, zbiory, grafy, drzewa itd.), z możliwymi różnymi konkretnymi implementacjami (reprezentacjami). Na końcu rozdziału przedstawiamy podstawowe metody konstruowania efektywnych algorytmów (metoda „dziel i zwyciężaj”, programowanie dynamiczne, metoda zachłanna, metoda kolejnych transformacji).

Analiza algorytmów to dział informatyki zajmujący się szukaniem najlepszych algorytmów dla zadań komputerowych. Polega ona między innymi na znalezieniu odpowiedzi na następujące pytania.

1. Czy dany problem może być rozwiązany na komputerze w dostępnym czasie i pamięci?

2. Który ze znanych algorytmów należy zastosować w danych okolicznościach?

3. Czy istnieje lepszy algorytm od rozważanego? A może jest on optymalny?

4. Jak uzasadnić, że stosując dany algorytm, rozwiąże się zamierzone zadanie?

Dokonując analizy algorytmu, zwracamy uwagę na jego poprawność semantyczną, prostotę, czas działania, ilość wykorzystywanej pamięci, optymalność oraz okoliczności, w jakich należy go używać, a w jakich nie.

1.1. Złożoność obliczeniowa

Złożoność obliczeniową algorytmu definiuje się jako ilość zasobów komputerowych potrzebnych do jego wykonania. Podstawowymi zasobami rozważanymi w analizie algorytmów są czas działania i ilość wykorzystywanej pamięci.

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.