際際滷

際際滷Share a Scribd company logo
Algorytm Knutha-Algorytm Knutha-
Morrisa-PrattaMorrisa-Pratta
TWRCYTWRCY
Zosta stworzony przez Vaughana Pratta i
Donalda Knutha oraz niezale甜nie przez J.
H. Morrisa w 1977, jednak甜e wszyscy trzej
opublikowali go wsp坦lnie.
TWRCYTWRCY
DONALD KNUTH VAUGHAN PRATT
Czym jest algorytm KMP?Czym jest algorytm KMP?
Najprociej m坦wic jest to algorytm
wyszukiwania wzorca w tekcie.
Wykorzystuje fakt, 甜e w przypadku
wystpienia niezgodnoci ze wzorcem,
sam wzorzec zawiera w sobie informacj
pozwalajc okreli gdzie powinna si
zacz kolejna pr坦ba dopasowania,
pomijajc ponowne por坦wnywanie ju甜
dopasowanych znak坦w. Dziki temu w
znaczny spos坦b zyskujemy na czasie.
Przykadowe dziaaniePrzykadowe dziaanie
Na pocztku potrzebujemy wzorca W i
tekstu T. Mamy te甜 dwie zmienne
pomocnicze t oraz w, kt坦re opisuj
odpowiednio pozycj w T, od kt坦rej
rozpoczyna si aktualne czciowe
dopasowanie, oraz indeksu W
oznaczajcego nastpny rozpatrywany
znak wzorca.
Przykadowe dziaaniePrzykadowe dziaanie
Przyjmimy:
w=012345678
W=ABBCCBABC
T=ABC
t=012
Przykadowe dziaaniePrzykadowe dziaanie
 Zaczynamy! Na pocztku por坦wnujemy znaki
W do r坦wnolegych im znak坦w z T,
przechodzc dalej, je甜eli wszystko si
zgadza. Jendka甜e widzimy, 甜e W[3]=B,
natomiast T[3]=C . W tym momencie
poniewa甜 widzimy, 甜e na pozycjach 1-6 nie
wystpuje A przesuwamy si na w=1 i
zaczynamy dopasowywanie od pocztku.
Dziki temu otrzymujemy niemal
natychmiastowe dopasowanie, kt坦re okazuje
si prawidowe.
PSEUDOKOD CZCIPSEUDOKOD CZCI
SZUKAJCEJSZUKAJCEJ
algorytm kmp_search:
wejcie: tablica znak坦w, S (przeszukiwany tekst)
tablica znak坦w, W (szukane sowo)
wyjcie: liczba cakowita (liczona od zera pozycja w S,
na kt坦rej znaleziono W)
zdefiniowane zmienne:
liczba cakowita, m = 0 (pocztek bie甜cego
dopasowania w S) liczba cakowita, i = 0 (pozycja bie甜cego
znaku w W)
tabela liczb cakowitych, T (tabela liczona gdzie indziej)
dop坦ki m + i jest mniejsze ni甜 dugo S, wykonuj:
je甜eli W[i] = S[m + i], niech i = i + 1
je甜eli i r坦wne jest dugoci W, zwr坦 m
w przeciwnym przypadku,
niech m = m + i - T[i], oraz jeli i > 0, niech i = T[i]
(jeli dotrzemy tu, tzn., 甜e przeszukalimy bezskutecznie
cay S)
zwr坦 dugo S
TABLICA CZCIOWYCHTABLICA CZCIOWYCH
DOPASOWADOPASOWA
Celem tej tabeli jest umo甜liwienie algorytmowi nie
dopasowywania 甜adnego znaku z S wicej ni甜 raz.
Kluczow obserwacj natury liniowego
poszukiwania, kt坦ra na to pozwala, polega na tym,
甜e majc por坦wnany pewien segment g坦wnego
cigu znak坦w z pocztkowym fragmentem wzorca,
wiemy dokadnie, w kt坦rych miejscach mogoby
zacz si nowe potencjalne dopasowanie przed
bie甜c pozycj. Inaczej m坦wic, wystpuje tutaj
"wstpne poszukiwanie" samego wzoru i zestawu
wszelkich mo甜liwych pozycji do powrotu, kt坦re
pomijaj ze wybory, nie zabierajc zasob坦w.
PSEUDOKOD ALGORYTMUPSEUDOKOD ALGORYTMU
BUDOWANIA TABELIBUDOWANIA TABELIalgorytm kmp_table:
Dane wejciowe:
tablica znak坦w, W (sowo, kt坦re bdzie analizowane)
tablica liczb cakowitych, T (kt坦ra ma by zapeniona)
Dane wyjciowe:
nic (ale podczas dziaania zapeniana jest tablica wejciowa) Zdefiniowane zmienne:
liczba cakowita, i = 2 (aktualna pozycja, jak przetwarzamy w tablicy T)
liczba cakowita, j = 0
(liczony od zera indeks tablicy W, w kt坦rej ma by umieszczona kolejna litera szukanego cigu znak坦w)
(pierwszych kilka wartoci to stae, ale inne, ni甜 algorytm m坦gby sugerowa)
niech T[0] = -1, T[1] = 0
dop坦ki i jest mniejsze od dugoci w, r坦b:
(pierwsza opcja: cig znak坦w jest du甜szy)
je甜eli W[i - 1] = W[j], niech T[i] = j + 1, i = i + 1, j = j + 1
(druga opcja: cig znak坦w nie jest du甜szy, ale nie mo甜emy si cofn)
w przeciwnym przypadku,
jeli j > 0, niech j = T[j]
(trzeci przypadek: wyczerpuje si zas坦b kandydat坦w, Zauwa甜, 甜e j=0)
w przeciwnym przypadku,
niech T[i] = 0, i = i + 1
ALGORYTMU KMP DLAALGORYTMU KMP DLA
JZYKA C++JZYKA C++
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#ifdef __cplusplus
int max (int value1, int value2);
int max(int value1, int value2)
{return ( (value1 > value2) ? value1 : value2); }
#endif
void main(void)
{
char wzorzec[100];
char tekst[2000];
int m,n,i,j,t;
int P[100];//maksymalna dlugosc wzorca to 100 symboli
printf("Podaj tekstn");
scanf("%s", tekst);
printf("Podaj wzorzecn");
scanf("%s", wzorzec);
n=strlen(tekst);
m=strlen(wzorzec);
printf("Indeksy poczatku wzorca w tekscien");
//obliczenie tablicy P
P[0]=0; P[1]=0; t=0;
for (j=2; j<=m; j++)
{
while ((t>0)&&(wzorzec[t]!=wzorzec[j-1])) t=P[t];
if (wzorzec[t]==wzorzec[j-1]) t++;
P[j]=t;
}
//algorytm KMP
i=1; j=0;
while (i<=n-m+1)
{
j=P[j];
while((j<m)&&(wzorzec[j]==tekst[i+j-1])) j++;
if (j==m) printf("%dn",i);
i=i+max(1,j-P[j]);
}
getch();
return;
}
ZO纏ONOZO纏ONO
OBLICZENIOWAOBLICZENIOWA
ALGORYTMU KMPALGORYTMU KMP
Zo甜ono czci szukajcej algorytmu KMP to O(k), gdzie k to
dugo tekstu, w kt坦rym bdziemy szuka wzorca. Natomiast
cz budowania tabeli ma zo甜ono mieszczc si w O(n),
gdzie n to dugo wzorca. Je甜eli wic algorytm skada si z 2
czci majcych zo甜onoci odpowiednio O(k) i O(n), to cakowita
zo甜ono bdzie wynosia O(k+n). Widzimy r坦wnie甜, 甜e ten
algorytm ma tak przewag nad algorytmem naiwnym
wyszukiwania wzorca, 甜e mo甜e pomija wiksz cz znak坦w. A
skoro mniej musi si cofa, to szybciej si wykonuje.
ALGORYTM KMP NAALGORYTM KMP NA
OLIMPIADZIEOLIMPIADZIE
INFORMATYCZNEJINFORMATYCZNEJ
Istnieje wiele zada olimpijskich, kt坦re da si
rozwiza za pomoc algorytmu KMP. Oto niekt坦re z
nich:
PUNKTY - XII OI
PALINDROMY - II OI
MEGACUBE - 5 OBZ OI
SZABLON - XII OI
http://pl.spoj.com/problems/KMP/ - SPOJ
KONIECKONIEC
Ad

Recommended

Drzewa przedziaowe
Drzewa przedziaowe
Mejczus
Referenciacion.
Maria suarez
Dia da terra
Fabiano Padilha
Anatomia curso lactancia 18hs
Residencia Nutrici坦n Eva Per坦n
New product launch
New product launch
S達bbIr Ahm谷d S辰r但d
1st paper-career planning
1st paper-career planning
Madison Collier
Bases legales
josemobe
Aula 7
Jorge Andre Sousa
Spelling and pronunciation by Alkhima Macarompis
Spelling and pronunciation by Alkhima Macarompis
Untroshlich
Fall Directors Meeting 2014: Program Quality - Developing Key Performance Ind...
Fall Directors Meeting 2014: Program Quality - Developing Key Performance Ind...
Bonner Foundation
The Mobile Consumer Age from SourceDigital13 (June 2013)
The Mobile Consumer Age from SourceDigital13 (June 2013)
Flurry, Inc.
Demo manual de-calidad
armando plaza castro
How did you use media technologies in the construction and research, planning...
How did you use media technologies in the construction and research, planning...
Wyke sixth form college
Mkt 450 week 2 team assignment international marketing plan mission statement...
Mkt 450 week 2 team assignment international marketing plan mission statement...
ENTIRE COURSES FINAL EXAM
Camp chris williams 2016
Camp chris williams 2016
Nan Asher
EL PALEOLTICO para 4尊 primaria
sabinaverde
Newsletter sl tterm1_is23
Newsletter sl tterm1_is23
BVIS Ha Noi
CIBERACOSO
cristinatesti
GUA PARA PADRES
cristinatesti
POST ACADEMY INSTRUCTOR CERTIFICATION REQUIREMENTS
POST ACADEMY INSTRUCTOR CERTIFICATION REQUIREMENTS
Kevin D. James
Jagdeep dangi
Jagdeep dangi
School of Language (爐爐鉦し爐 爐朽た爐爛爐爐鉦お爛爐), Mahatma Gandhi Antarrashtriya Hindi Vishwavidyalaya, Wardha
Computer systems ii
Computer systems ii
Udara Sandaruwan
Issue26
Issue26
BVIS Ha Noi
Analysis of film trailer sinister
Analysis of film trailer sinister
elliereedx

More Related Content

Viewers also liked (16)

Spelling and pronunciation by Alkhima Macarompis
Spelling and pronunciation by Alkhima Macarompis
Untroshlich
Fall Directors Meeting 2014: Program Quality - Developing Key Performance Ind...
Fall Directors Meeting 2014: Program Quality - Developing Key Performance Ind...
Bonner Foundation
The Mobile Consumer Age from SourceDigital13 (June 2013)
The Mobile Consumer Age from SourceDigital13 (June 2013)
Flurry, Inc.
Demo manual de-calidad
armando plaza castro
How did you use media technologies in the construction and research, planning...
How did you use media technologies in the construction and research, planning...
Wyke sixth form college
Mkt 450 week 2 team assignment international marketing plan mission statement...
Mkt 450 week 2 team assignment international marketing plan mission statement...
ENTIRE COURSES FINAL EXAM
Camp chris williams 2016
Camp chris williams 2016
Nan Asher
EL PALEOLTICO para 4尊 primaria
sabinaverde
Newsletter sl tterm1_is23
Newsletter sl tterm1_is23
BVIS Ha Noi
CIBERACOSO
cristinatesti
GUA PARA PADRES
cristinatesti
POST ACADEMY INSTRUCTOR CERTIFICATION REQUIREMENTS
POST ACADEMY INSTRUCTOR CERTIFICATION REQUIREMENTS
Kevin D. James
Jagdeep dangi
Jagdeep dangi
School of Language (爐爐鉦し爐 爐朽た爐爛爐爐鉦お爛爐), Mahatma Gandhi Antarrashtriya Hindi Vishwavidyalaya, Wardha
Computer systems ii
Computer systems ii
Udara Sandaruwan
Issue26
Issue26
BVIS Ha Noi
Analysis of film trailer sinister
Analysis of film trailer sinister
elliereedx
Spelling and pronunciation by Alkhima Macarompis
Spelling and pronunciation by Alkhima Macarompis
Untroshlich
Fall Directors Meeting 2014: Program Quality - Developing Key Performance Ind...
Fall Directors Meeting 2014: Program Quality - Developing Key Performance Ind...
Bonner Foundation
The Mobile Consumer Age from SourceDigital13 (June 2013)
The Mobile Consumer Age from SourceDigital13 (June 2013)
Flurry, Inc.
Demo manual de-calidad
armando plaza castro
How did you use media technologies in the construction and research, planning...
How did you use media technologies in the construction and research, planning...
Wyke sixth form college
Mkt 450 week 2 team assignment international marketing plan mission statement...
Mkt 450 week 2 team assignment international marketing plan mission statement...
ENTIRE COURSES FINAL EXAM
Camp chris williams 2016
Camp chris williams 2016
Nan Asher
EL PALEOLTICO para 4尊 primaria
sabinaverde
Newsletter sl tterm1_is23
Newsletter sl tterm1_is23
BVIS Ha Noi
CIBERACOSO
cristinatesti
GUA PARA PADRES
cristinatesti
POST ACADEMY INSTRUCTOR CERTIFICATION REQUIREMENTS
POST ACADEMY INSTRUCTOR CERTIFICATION REQUIREMENTS
Kevin D. James
Analysis of film trailer sinister
Analysis of film trailer sinister
elliereedx

Suchy

  • 2. TWRCYTWRCY Zosta stworzony przez Vaughana Pratta i Donalda Knutha oraz niezale甜nie przez J. H. Morrisa w 1977, jednak甜e wszyscy trzej opublikowali go wsp坦lnie.
  • 4. Czym jest algorytm KMP?Czym jest algorytm KMP? Najprociej m坦wic jest to algorytm wyszukiwania wzorca w tekcie. Wykorzystuje fakt, 甜e w przypadku wystpienia niezgodnoci ze wzorcem, sam wzorzec zawiera w sobie informacj pozwalajc okreli gdzie powinna si zacz kolejna pr坦ba dopasowania, pomijajc ponowne por坦wnywanie ju甜 dopasowanych znak坦w. Dziki temu w znaczny spos坦b zyskujemy na czasie.
  • 5. Przykadowe dziaaniePrzykadowe dziaanie Na pocztku potrzebujemy wzorca W i tekstu T. Mamy te甜 dwie zmienne pomocnicze t oraz w, kt坦re opisuj odpowiednio pozycj w T, od kt坦rej rozpoczyna si aktualne czciowe dopasowanie, oraz indeksu W oznaczajcego nastpny rozpatrywany znak wzorca.
  • 7. Przykadowe dziaaniePrzykadowe dziaanie Zaczynamy! Na pocztku por坦wnujemy znaki W do r坦wnolegych im znak坦w z T, przechodzc dalej, je甜eli wszystko si zgadza. Jendka甜e widzimy, 甜e W[3]=B, natomiast T[3]=C . W tym momencie poniewa甜 widzimy, 甜e na pozycjach 1-6 nie wystpuje A przesuwamy si na w=1 i zaczynamy dopasowywanie od pocztku. Dziki temu otrzymujemy niemal natychmiastowe dopasowanie, kt坦re okazuje si prawidowe.
  • 8. PSEUDOKOD CZCIPSEUDOKOD CZCI SZUKAJCEJSZUKAJCEJ algorytm kmp_search: wejcie: tablica znak坦w, S (przeszukiwany tekst) tablica znak坦w, W (szukane sowo) wyjcie: liczba cakowita (liczona od zera pozycja w S, na kt坦rej znaleziono W) zdefiniowane zmienne: liczba cakowita, m = 0 (pocztek bie甜cego dopasowania w S) liczba cakowita, i = 0 (pozycja bie甜cego znaku w W) tabela liczb cakowitych, T (tabela liczona gdzie indziej) dop坦ki m + i jest mniejsze ni甜 dugo S, wykonuj: je甜eli W[i] = S[m + i], niech i = i + 1 je甜eli i r坦wne jest dugoci W, zwr坦 m w przeciwnym przypadku, niech m = m + i - T[i], oraz jeli i > 0, niech i = T[i] (jeli dotrzemy tu, tzn., 甜e przeszukalimy bezskutecznie cay S) zwr坦 dugo S
  • 9. TABLICA CZCIOWYCHTABLICA CZCIOWYCH DOPASOWADOPASOWA Celem tej tabeli jest umo甜liwienie algorytmowi nie dopasowywania 甜adnego znaku z S wicej ni甜 raz. Kluczow obserwacj natury liniowego poszukiwania, kt坦ra na to pozwala, polega na tym, 甜e majc por坦wnany pewien segment g坦wnego cigu znak坦w z pocztkowym fragmentem wzorca, wiemy dokadnie, w kt坦rych miejscach mogoby zacz si nowe potencjalne dopasowanie przed bie甜c pozycj. Inaczej m坦wic, wystpuje tutaj "wstpne poszukiwanie" samego wzoru i zestawu wszelkich mo甜liwych pozycji do powrotu, kt坦re pomijaj ze wybory, nie zabierajc zasob坦w.
  • 10. PSEUDOKOD ALGORYTMUPSEUDOKOD ALGORYTMU BUDOWANIA TABELIBUDOWANIA TABELIalgorytm kmp_table: Dane wejciowe: tablica znak坦w, W (sowo, kt坦re bdzie analizowane) tablica liczb cakowitych, T (kt坦ra ma by zapeniona) Dane wyjciowe: nic (ale podczas dziaania zapeniana jest tablica wejciowa) Zdefiniowane zmienne: liczba cakowita, i = 2 (aktualna pozycja, jak przetwarzamy w tablicy T) liczba cakowita, j = 0 (liczony od zera indeks tablicy W, w kt坦rej ma by umieszczona kolejna litera szukanego cigu znak坦w) (pierwszych kilka wartoci to stae, ale inne, ni甜 algorytm m坦gby sugerowa) niech T[0] = -1, T[1] = 0 dop坦ki i jest mniejsze od dugoci w, r坦b: (pierwsza opcja: cig znak坦w jest du甜szy) je甜eli W[i - 1] = W[j], niech T[i] = j + 1, i = i + 1, j = j + 1 (druga opcja: cig znak坦w nie jest du甜szy, ale nie mo甜emy si cofn) w przeciwnym przypadku, jeli j > 0, niech j = T[j] (trzeci przypadek: wyczerpuje si zas坦b kandydat坦w, Zauwa甜, 甜e j=0) w przeciwnym przypadku, niech T[i] = 0, i = i + 1
  • 11. ALGORYTMU KMP DLAALGORYTMU KMP DLA JZYKA C++JZYKA C++ #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <string.h> #ifdef __cplusplus int max (int value1, int value2); int max(int value1, int value2) {return ( (value1 > value2) ? value1 : value2); } #endif void main(void) { char wzorzec[100]; char tekst[2000]; int m,n,i,j,t; int P[100];//maksymalna dlugosc wzorca to 100 symboli printf("Podaj tekstn"); scanf("%s", tekst); printf("Podaj wzorzecn"); scanf("%s", wzorzec); n=strlen(tekst); m=strlen(wzorzec); printf("Indeksy poczatku wzorca w tekscien"); //obliczenie tablicy P P[0]=0; P[1]=0; t=0; for (j=2; j<=m; j++) { while ((t>0)&&(wzorzec[t]!=wzorzec[j-1])) t=P[t]; if (wzorzec[t]==wzorzec[j-1]) t++; P[j]=t; } //algorytm KMP i=1; j=0; while (i<=n-m+1) { j=P[j]; while((j<m)&&(wzorzec[j]==tekst[i+j-1])) j++; if (j==m) printf("%dn",i); i=i+max(1,j-P[j]); } getch(); return; }
  • 12. ZO纏ONOZO纏ONO OBLICZENIOWAOBLICZENIOWA ALGORYTMU KMPALGORYTMU KMP Zo甜ono czci szukajcej algorytmu KMP to O(k), gdzie k to dugo tekstu, w kt坦rym bdziemy szuka wzorca. Natomiast cz budowania tabeli ma zo甜ono mieszczc si w O(n), gdzie n to dugo wzorca. Je甜eli wic algorytm skada si z 2 czci majcych zo甜onoci odpowiednio O(k) i O(n), to cakowita zo甜ono bdzie wynosia O(k+n). Widzimy r坦wnie甜, 甜e ten algorytm ma tak przewag nad algorytmem naiwnym wyszukiwania wzorca, 甜e mo甜e pomija wiksz cz znak坦w. A skoro mniej musi si cofa, to szybciej si wykonuje.
  • 13. ALGORYTM KMP NAALGORYTM KMP NA OLIMPIADZIEOLIMPIADZIE INFORMATYCZNEJINFORMATYCZNEJ Istnieje wiele zada olimpijskich, kt坦re da si rozwiza za pomoc algorytmu KMP. Oto niekt坦re z nich: PUNKTY - XII OI PALINDROMY - II OI MEGACUBE - 5 OBZ OI SZABLON - XII OI http://pl.spoj.com/problems/KMP/ - SPOJ