Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Algorytm Naiwny ABDCAADBACDABCDAECABBADCA Ciąg znaków: Wzorzec: ABBA.

Podobne prezentacje


Prezentacja na temat: "Algorytm Naiwny ABDCAADBACDABCDAECABBADCA Ciąg znaków: Wzorzec: ABBA."— Zapis prezentacji:

1 Algorytm Naiwny ABDCAADBACDABCDAECABBADCA Ciąg znaków: Wzorzec: ABBA

2 ABDCAADBACDABCDAECABBADCA ABBA ABDCAADBACDABCDAECABBADCA ABBA ABDCAADBACDABCDAECABBADCA ABBA ABDCAADBACDABCDAECABBADCA ABBA ABDCAADBACDABCDAECABBADCA ABBA ABDCAADBACDABCDAECABBADCA ABBA ABDCAADBACDABCDAECABBADCA ABBA

3 Algorytm Boyera-Moorea (uproszczony) ACBADBABCABD Ciąg znaków: ABCAB Wzorzec: 1.Okno wzorca umieszczamy na początku przeszukiwanego tekstu. 2.Porównanie rozpoczynamy od ostatniego znaku wzorca. Znaki są różne. Dodatkowo znak D z tekstu nie występuje we wzorcu. 3.Wzorzec przesuwamy o wielkość okna – 5 4.Brak zgodności – ale we wzorcu jest A ACBADBABCABD ABCAB ACBADBABCABD ABCAB

4 5.Okno wzorca przesuwamy tak, aby litera A z tekstu i ostatnia litera A ze wzorca zrównały się pozycjami. 6.Porównujemy pozostałe znaki ACBADBABCABD ABCAB ACBADBABCABD ABCAB

5 Algorytm Boyera-Moorea Tablica Last (indeksy poszczególnych elementów odpowiadają kodom znaków alfabetu, elementy natomiast określają ostatnie położenie danej litery we wzorcu) Przesunięcie: Index0123 LiteraABCD Wartość342 ABCAB Wzorzec: i – pozycja okna wzorca w tekście j – pozycja niezgodności okna ze wzorcem

6 ACBADBAACABD ABCAB A) Brak znaku we wzorcu, gdyż: Last['D'] = -1, to przesunięcie wynosi: i = – (– 1) = 5 Index0123 LiteraABCD Wartość342 B) Znak jest we wzorcu gdyż: Last['A'] = 3, to przesunięcie wynosi: i = – 3 = 6 C) Nigdy nie cofamy okna w lewo: Last['A'] = 3, to przesunięcie wynosi: i = = 1 ACBADBAACABD ABCAB ?ACAB??????? ABCAB

7 Funkcje haszujące 1.Alfabet: ABC (3-znakowy) 1.Kody znaków: A = 0, B = 1, C = 2 2.Podstawa: 3 (długość alfabetu) 3.Moduł: 23 (najlepiej liczba pierwsza, niezamała) 2.Wzorzec: CBBAB

8 Funkcje haszujące Łańcuch znaków: CBBABB Wzorzec: BBABB 1.Wyznacz hash okna: H(CBBAB) = 15 2.Przesuń okno o jeden w prawo (okno: BBABB) 3.Wyznacz H(BBABB) na podstawie H(CBBAB) 1.Usuń pierwszy znak (C): 2.Przesunięcie wszystkich znaków hasha o jedno w lewo 3.Dodanie nowego znaku (B) 4.Sprawdźmy: Kody znaków: A = 0, B = 1, C = 2

9 m = length(p) // lub p_len=|p| n = length(s) // lub s_len=|s| pat_hash = H(p) str_hash = H(s[0:m]) // hash pierwotnego okna i = 0 while i < n – m // dopóki mamy co przetwarzać if str_hash NOT pat_hash // jeśli hash okna jest różny od hasha wzorca i++ // przesun okno wzorca o jeden w prawo str_hash = H(s[i:i+m]) // oblicz nowy hash okna else if p == s[i:i+m] //sprawdz czy na pewno wzorzec jest na pozycji i return i //jesteśmy pewnie, że znaleźliśmy wzorzec endwhile return -1 //wzorca nie znaleziono Algorytm Karpa-Rabina


Pobierz ppt "Algorytm Naiwny ABDCAADBACDABCDAECABBADCA Ciąg znaków: Wzorzec: ABBA."

Podobne prezentacje


Reklamy Google