Zaawansowane algorytmy i struktury danych/Ćwiczenia 1

Z Studia Informatyczne
Wersja z dnia 10:55, 12 wrz 2006 autorstwa Rytter (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Zadanie 1

Sprawdz w czasie liniowym czy słowo x jest pierwotne.

Rozwiązanie

Za pomocą tablicy prefikso-sufiksów liczymy najkrótszy okres słowa x, następnie sprawdzamy czy jest on dzielnikiem długości x. Można to nawet zrobic bez tablicy prefikso-sufiksów w czasei liniowym i pamięci stałej.

Zadanie 2

Pokaż redukcję w czasie liniowym problemu liczenia tablicy PREF do liczenia tablicy P

Rozwiązanie

Zadanie 3

Załóżmy, że wzorzec x jest ustalony, ma długość m, a tekst y w którym szukamy x jest losowym tekstem długości n, alfabet jest binarny. Każdy symbol jest zerem lub jedynką niezależnie z takim samym prawdopodobieństwem 1/2.

Skonstruuj algorytm, który będzie szukał wzorca x w czasei oczekiwanym (średnim) O(nmlogm)

Rozwiązanie

Zadanie 4

Udowdnij, że w modelu takim jak w poprzednim zadaniu algorytm BM nie ma złożoności oczekiwanej rzędu mniejszego niż liniowy.

Rozwiązanie

Zadanie 5

Pokaż, że jeśli cn jest górnym oszacowaniem liczby porównań w algorytmie BM (dla dostatecznie dużych n) to c3

Rozwiązanie