• Nie Znaleziono Wyników

Algorytm Rabina-Karpa

W dokumencie Część 4 (Stron 21-67)

Pesymistyczny czas dziaªania Θ((n − m + 1)m), ale czas ±redni jest znacznie lepszy.

Wykorzystuje elementarn¡ teori¦ liczb. Pomysª: interpretowa¢

alfabet Σ jako zbiór cyfr systemu o podstawie d = |Σ|, tekst dªugo±ci n jako n-cyfrow¡ liczb¦ w tym systemie.

Wówczas tekst T i wzorzec P s¡ liczbami, które mo»na porównywa¢ u»ywaj¡c teorii liczb.

Przykªad: Σ = {a, b, c}, d = 3; a ↔ 0, b ↔ 1, c ↔ 2. Jak¡ liczb¡ w systemie dziesi¦tnym jest tekst T = baba? baba3=10103

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Pesymistyczny czas dziaªania Θ((n − m + 1)m), ale czas ±redni jest znacznie lepszy.

Wykorzystuje elementarn¡ teori¦ liczb.

Pomysª: interpretowa¢

alfabet Σ jako zbiór cyfr systemu o podstawie d = |Σ|, tekst dªugo±ci n jako n-cyfrow¡ liczb¦ w tym systemie.

Wówczas tekst T i wzorzec P s¡ liczbami, które mo»na porównywa¢ u»ywaj¡c teorii liczb.

Przykªad: Σ = {a, b, c}, d = 3; a ↔ 0, b ↔ 1, c ↔ 2. Jak¡ liczb¡ w systemie dziesi¦tnym jest tekst T = baba? baba3=10103

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Pesymistyczny czas dziaªania Θ((n − m + 1)m), ale czas ±redni jest znacznie lepszy.

Wykorzystuje elementarn¡ teori¦ liczb. Pomysª: interpretowa¢

alfabet Σ jako zbiór cyfr systemu o podstawie d = |Σ|,

tekst dªugo±ci n jako n-cyfrow¡ liczb¦ w tym systemie.

Wówczas tekst T i wzorzec P s¡ liczbami, które mo»na porównywa¢ u»ywaj¡c teorii liczb.

Przykªad: Σ = {a, b, c}, d = 3; a ↔ 0, b ↔ 1, c ↔ 2. Jak¡ liczb¡ w systemie dziesi¦tnym jest tekst T = baba? baba3=10103

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Pesymistyczny czas dziaªania Θ((n − m + 1)m), ale czas ±redni jest znacznie lepszy.

Wykorzystuje elementarn¡ teori¦ liczb. Pomysª: interpretowa¢

alfabet Σ jako zbiór cyfr systemu o podstawie d = |Σ|, tekst dªugo±ci n jako n-cyfrow¡ liczb¦ w tym systemie.

Wówczas tekst T i wzorzec P s¡ liczbami, które mo»na porównywa¢ u»ywaj¡c teorii liczb.

Przykªad: Σ = {a, b, c}, d = 3; a ↔ 0, b ↔ 1, c ↔ 2. Jak¡ liczb¡ w systemie dziesi¦tnym jest tekst T = baba? baba3=10103

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Pesymistyczny czas dziaªania Θ((n − m + 1)m), ale czas ±redni jest znacznie lepszy.

Wykorzystuje elementarn¡ teori¦ liczb. Pomysª: interpretowa¢

alfabet Σ jako zbiór cyfr systemu o podstawie d = |Σ|, tekst dªugo±ci n jako n-cyfrow¡ liczb¦ w tym systemie.

Wówczas tekst T i wzorzec P s¡ liczbami, które mo»na porównywa¢ u»ywaj¡c teorii liczb.

Przykªad: Σ = {a, b, c}, d = 3; a ↔ 0, b ↔ 1, c ↔ 2. Jak¡ liczb¡ w systemie dziesi¦tnym jest tekst T = baba? baba3=10103

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Pesymistyczny czas dziaªania Θ((n − m + 1)m), ale czas ±redni jest znacznie lepszy.

Wykorzystuje elementarn¡ teori¦ liczb. Pomysª: interpretowa¢

alfabet Σ jako zbiór cyfr systemu o podstawie d = |Σ|, tekst dªugo±ci n jako n-cyfrow¡ liczb¦ w tym systemie.

Wówczas tekst T i wzorzec P s¡ liczbami, które mo»na porównywa¢ u»ywaj¡c teorii liczb.

Przykªad: Σ = {a, b, c}, d = 3; a ↔ 0, b ↔ 1, c ↔ 2.

Jak¡ liczb¡ w systemie dziesi¦tnym jest tekst T = baba? baba3=10103

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Pesymistyczny czas dziaªania Θ((n − m + 1)m), ale czas ±redni jest znacznie lepszy.

Wykorzystuje elementarn¡ teori¦ liczb. Pomysª: interpretowa¢

alfabet Σ jako zbiór cyfr systemu o podstawie d = |Σ|, tekst dªugo±ci n jako n-cyfrow¡ liczb¦ w tym systemie.

Wówczas tekst T i wzorzec P s¡ liczbami, które mo»na porównywa¢ u»ywaj¡c teorii liczb.

Przykªad: Σ = {a, b, c}, d = 3; a ↔ 0, b ↔ 1, c ↔ 2. Jak¡ liczb¡ w systemie dziesi¦tnym jest tekst T = baba?

baba3=10103

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Pesymistyczny czas dziaªania Θ((n − m + 1)m), ale czas ±redni jest znacznie lepszy.

Wykorzystuje elementarn¡ teori¦ liczb. Pomysª: interpretowa¢

alfabet Σ jako zbiór cyfr systemu o podstawie d = |Σ|, tekst dªugo±ci n jako n-cyfrow¡ liczb¦ w tym systemie.

Wówczas tekst T i wzorzec P s¡ liczbami, które mo»na porównywa¢ u»ywaj¡c teorii liczb.

Przykªad: Σ = {a, b, c}, d = 3; a ↔ 0, b ↔ 1, c ↔ 2. Jak¡ liczb¡ w systemie dziesi¦tnym jest tekst T = baba?

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Pesymistyczny czas dziaªania Θ((n − m + 1)m), ale czas ±redni jest znacznie lepszy.

Wykorzystuje elementarn¡ teori¦ liczb. Pomysª: interpretowa¢

alfabet Σ jako zbiór cyfr systemu o podstawie d = |Σ|, tekst dªugo±ci n jako n-cyfrow¡ liczb¦ w tym systemie.

Wówczas tekst T i wzorzec P s¡ liczbami, które mo»na porównywa¢ u»ywaj¡c teorii liczb.

Przykªad: Σ = {a, b, c}, d = 3; a ↔ 0, b ↔ 1, c ↔ 2. Jak¡ liczb¡ w systemie dziesi¦tnym jest tekst T = baba? baba3=10103 = (1 · 33+0 · 32+1 · 31+0 · 30)10=3010.

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Dla uproszczenia: Σ = {0, 1, 2, . . . , 9}, d = 10.

Ustalmy tekst T [1..n] i wzorzec P[1..m]. Oznaczenia:

p = warto±¢ dziesi¦tna P,

ts = warto±¢ dziesi¦tna podsªowa T [s + 1..s + m], dla s = 0, 1, . . . , n − m.

Wówczas P wyst¦puje z przesuni¦ciem s w T (tj. T [s + 1..s + m] = P[1..m]) ⇔ ts =p.

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Dla uproszczenia: Σ = {0, 1, 2, . . . , 9}, d = 10. Ustalmy tekst T [1..n] i wzorzec P[1..m]. Oznaczenia:

p = warto±¢ dziesi¦tna P,

ts = warto±¢ dziesi¦tna podsªowa T [s + 1..s + m], dla s = 0, 1, . . . , n − m.

Wówczas P wyst¦puje z przesuni¦ciem s w T (tj. T [s + 1..s + m] = P[1..m]) ⇔ ts =p.

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Dla uproszczenia: Σ = {0, 1, 2, . . . , 9}, d = 10. Ustalmy tekst T [1..n] i wzorzec P[1..m]. Oznaczenia:

p = warto±¢ dziesi¦tna P,

ts = warto±¢ dziesi¦tna podsªowa T [s + 1..s + m], dla s = 0, 1, . . . , n − m.

Wówczas P wyst¦puje z przesuni¦ciem s w T (tj. T [s + 1..s + m] = P[1..m]) ⇔ ts =p.

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Zaªó»my, »e:

1 obliczymy p w czasie O(m),

2 obliczymy wszystkie warto±ci ts, dla s = 0, 1, . . . , n − m, w sumie w czasie O(n).

Wówczas wyznaczymy wszystkie wyst¡pienia wzorca P w T porównuj¡c p z kolejnymi warto±ciami ts = czas O(n). ⇒ Zªo»ono±¢: O(m + n + n) = O(m + n).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Zaªó»my, »e:

1 obliczymy p w czasie O(m),

2 obliczymy wszystkie warto±ci ts, dla s = 0, 1, . . . , n − m, w sumie w czasie O(n).

Wówczas wyznaczymy wszystkie wyst¡pienia wzorca P w T porównuj¡c p z kolejnymi warto±ciami ts = czas O(n). ⇒ Zªo»ono±¢: O(m + n + n) = O(m + n).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Zaªó»my, »e:

1 obliczymy p w czasie O(m),

2 obliczymy wszystkie warto±ci ts, dla s = 0, 1, . . . , n − m, w sumie w czasie O(n).

Wówczas wyznaczymy wszystkie wyst¡pienia wzorca P w T porównuj¡c p z kolejnymi warto±ciami ts = czas O(n). ⇒ Zªo»ono±¢: O(m + n + n) = O(m + n).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Zaªó»my, »e:

1 obliczymy p w czasie O(m),

2 obliczymy wszystkie warto±ci ts, dla s = 0, 1, . . . , n − m, w sumie w czasie O(n).

Wówczas wyznaczymy wszystkie wyst¡pienia wzorca P w T porównuj¡c p z kolejnymi warto±ciami ts = czas O(n).

⇒ Zªo»ono±¢: O(m + n + n) = O(m + n). Jak zrealizowa¢ 1 i 2 ?

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Zaªó»my, »e:

1 obliczymy p w czasie O(m),

2 obliczymy wszystkie warto±ci ts, dla s = 0, 1, . . . , n − m, w sumie w czasie O(n).

Wówczas wyznaczymy wszystkie wyst¡pienia wzorca P w T porównuj¡c p z kolejnymi warto±ciami ts = czas O(n). ⇒ Zªo»ono±¢: O(m + n + n) = O(m + n).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Zaªó»my, »e:

1 obliczymy p w czasie O(m),

2 obliczymy wszystkie warto±ci ts, dla s = 0, 1, . . . , n − m, w sumie w czasie O(n).

Wówczas wyznaczymy wszystkie wyst¡pienia wzorca P w T porównuj¡c p z kolejnymi warto±ciami ts = czas O(n). ⇒ Zªo»ono±¢: O(m + n + n) = O(m + n).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ad 1. Obliczenie p.

p = p[1] · 10m−1+ . . . +p[m − 2] · 102+p[m − 1] · 101+p[m] · 100 Jest to warto±¢ wielomianu

p[1] · xm−1+ . . . +p[m − 2] · x2+p[m − 1] · x1+p[m] · x0

w punkcie 10.

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ad 1. Obliczenie p.

p = p[1] · 10m−1+ . . . +p[m − 2] · 102+p[m − 1] · 101+p[m] · 100

Jest to warto±¢ wielomianu

p[1] · xm−1+ . . . +p[m − 2] · x2+p[m − 1] · x1+p[m] · x0

w punkcie 10.

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ad 1. Obliczenie p.

p = p[1] · 10m−1+ . . . +p[m − 2] · 102+p[m − 1] · 101+p[m] · 100 Jest to warto±¢ wielomianu

p[1] · xm−1+ . . . +p[m − 2] · x2+p[m − 1] · x1+p[m] · x0

w punkcie 10.

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ad 1. Obliczenie p.

p = p[1] · 10m−1+ . . . +p[m − 2] · 102+p[m − 1] · 101+p[m] · 100 Jest to warto±¢ wielomianu

p[1] · xm−1+ . . . +p[m − 2] · x2+p[m − 1] · x1+p[m] · x0

w punkcie 10.

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ad 2. Obliczenie wszystkich warto±ci ts, dla s = 0, 1, . . . , n − m.

ts to równie» warto±ci wielomianów stopnia m − 1 w punkcie 10. Stosuj¡c do ka»dej ts metod¦ Hornera obliczyliby±my wszystkie w czasie O(nm).

Mo»na lepiej:

obliczamy t0 w czasie O(m),

zauwa»my, »e ts+1=10(ts −10m−1T [s + 1]) + T [s + m + 1], wyznaczenie ts+1, maj¡c ts zajmuje czas O(1),

wyliczenie t1,t2, . . . ,tn−m zajmuje czas O(n − m), wyliczenie wszystkich t0,t1,t2, . . . ,tn−mzajmuje O(m + n − m) = O(n).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ad 2. Obliczenie wszystkich warto±ci ts, dla s = 0, 1, . . . , n − m. ts to równie» warto±ci wielomianów stopnia m − 1 w punkcie 10.

Stosuj¡c do ka»dej ts metod¦ Hornera obliczyliby±my wszystkie w czasie O(nm).

Mo»na lepiej:

obliczamy t0 w czasie O(m),

zauwa»my, »e ts+1=10(ts −10m−1T [s + 1]) + T [s + m + 1], wyznaczenie ts+1, maj¡c ts zajmuje czas O(1),

wyliczenie t1,t2, . . . ,tn−m zajmuje czas O(n − m), wyliczenie wszystkich t0,t1,t2, . . . ,tn−mzajmuje O(m + n − m) = O(n).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ad 2. Obliczenie wszystkich warto±ci ts, dla s = 0, 1, . . . , n − m. ts to równie» warto±ci wielomianów stopnia m − 1 w punkcie 10. Stosuj¡c do ka»dej ts metod¦ Hornera obliczyliby±my wszystkie w czasie O(nm).

Mo»na lepiej:

obliczamy t0 w czasie O(m),

zauwa»my, »e ts+1=10(ts −10m−1T [s + 1]) + T [s + m + 1], wyznaczenie ts+1, maj¡c ts zajmuje czas O(1),

wyliczenie t1,t2, . . . ,tn−m zajmuje czas O(n − m), wyliczenie wszystkich t0,t1,t2, . . . ,tn−mzajmuje O(m + n − m) = O(n).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ad 2. Obliczenie wszystkich warto±ci ts, dla s = 0, 1, . . . , n − m. ts to równie» warto±ci wielomianów stopnia m − 1 w punkcie 10. Stosuj¡c do ka»dej ts metod¦ Hornera obliczyliby±my wszystkie w czasie O(nm).

Mo»na lepiej:

obliczamy t0 w czasie O(m),

zauwa»my, »e ts+1=10(ts −10m−1T [s + 1]) + T [s + m + 1], wyznaczenie ts+1, maj¡c ts zajmuje czas O(1),

wyliczenie t1,t2, . . . ,tn−m zajmuje czas O(n − m), wyliczenie wszystkich t0,t1,t2, . . . ,tn−mzajmuje O(m + n − m) = O(n).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ad 2. Obliczenie wszystkich warto±ci ts, dla s = 0, 1, . . . , n − m. ts to równie» warto±ci wielomianów stopnia m − 1 w punkcie 10. Stosuj¡c do ka»dej ts metod¦ Hornera obliczyliby±my wszystkie w czasie O(nm).

Mo»na lepiej:

obliczamy t0 w czasie O(m),

zauwa»my, »e ts+1=10(ts −10m−1T [s + 1]) + T [s + m + 1], wyznaczenie ts+1, maj¡c ts zajmuje czas O(1),

wyliczenie t1,t2, . . . ,tn−m zajmuje czas O(n − m), wyliczenie wszystkich t0,t1,t2, . . . ,tn−mzajmuje O(m + n − m) = O(n).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ad 2. Obliczenie wszystkich warto±ci ts, dla s = 0, 1, . . . , n − m. ts to równie» warto±ci wielomianów stopnia m − 1 w punkcie 10. Stosuj¡c do ka»dej ts metod¦ Hornera obliczyliby±my wszystkie w czasie O(nm).

Mo»na lepiej:

obliczamy t0 w czasie O(m),

zauwa»my, »e ts+1=10(ts −10m−1T [s + 1]) + T [s + m + 1],

wyznaczenie ts+1, maj¡c ts zajmuje czas O(1), wyliczenie t1,t2, . . . ,tn−m zajmuje czas O(n − m), wyliczenie wszystkich t0,t1,t2, . . . ,tn−mzajmuje O(m + n − m) = O(n).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ad 2. Obliczenie wszystkich warto±ci ts, dla s = 0, 1, . . . , n − m. ts to równie» warto±ci wielomianów stopnia m − 1 w punkcie 10. Stosuj¡c do ka»dej ts metod¦ Hornera obliczyliby±my wszystkie w czasie O(nm).

Mo»na lepiej:

obliczamy t0 w czasie O(m),

zauwa»my, »e ts+1=10(ts −10m−1T [s + 1]) + T [s + m + 1], wyznaczenie ts+1, maj¡c ts zajmuje czas O(1),

wyliczenie t1,t2, . . . ,tn−m zajmuje czas O(n − m), wyliczenie wszystkich t0,t1,t2, . . . ,tn−mzajmuje O(m + n − m) = O(n).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ad 2. Obliczenie wszystkich warto±ci ts, dla s = 0, 1, . . . , n − m. ts to równie» warto±ci wielomianów stopnia m − 1 w punkcie 10. Stosuj¡c do ka»dej ts metod¦ Hornera obliczyliby±my wszystkie w czasie O(nm).

Mo»na lepiej:

obliczamy t0 w czasie O(m),

zauwa»my, »e ts+1=10(ts −10m−1T [s + 1]) + T [s + m + 1], wyznaczenie ts+1, maj¡c ts zajmuje czas O(1),

wyliczenie t1,t2, . . . ,tn−m zajmuje czas O(n − m),

wyliczenie wszystkich t0,t1,t2, . . . ,tn−mzajmuje O(m + n − m) = O(n).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ad 2. Obliczenie wszystkich warto±ci ts, dla s = 0, 1, . . . , n − m. ts to równie» warto±ci wielomianów stopnia m − 1 w punkcie 10. Stosuj¡c do ka»dej ts metod¦ Hornera obliczyliby±my wszystkie w czasie O(nm).

Mo»na lepiej:

obliczamy t0 w czasie O(m),

zauwa»my, »e ts+1=10(ts −10m−1T [s + 1]) + T [s + m + 1], wyznaczenie ts+1, maj¡c ts zajmuje czas O(1),

wyliczenie t1,t2, . . . ,tn−m zajmuje czas O(n − m), wyliczenie wszystkich t0,t1,t2, . . . ,tn−m zajmuje O(m + n − m) = O(n).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Na podstawie poprzednich rozwa»a« mamy algorytm szukania wzorca o zªo»ono±ci O(n + m).

Ale:

operujemy tu na potencjalnie bardzo du»ych liczbach! Zaªo»enie, »e ka»da operacja arytmetyczna zajmuje czas staªy jest zbyt du»ym uproszczeniem, faktyczna zªo»ono±¢ jest du»o wi¦ksza ni» O(n + m).

Pomysª: arytmetyka modulo.

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Na podstawie poprzednich rozwa»a« mamy algorytm szukania wzorca o zªo»ono±ci O(n + m).

Ale: operujemy tu na potencjalnie bardzo du»ych liczbach!

Zaªo»enie, »e ka»da operacja arytmetyczna zajmuje czas staªy jest zbyt du»ym uproszczeniem, faktyczna zªo»ono±¢ jest du»o wi¦ksza ni» O(n + m).

Pomysª: arytmetyka modulo.

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Na podstawie poprzednich rozwa»a« mamy algorytm szukania wzorca o zªo»ono±ci O(n + m).

Ale: operujemy tu na potencjalnie bardzo du»ych liczbach! Zaªo»enie, »e ka»da operacja arytmetyczna zajmuje czas staªy jest zbyt du»ym uproszczeniem, faktyczna zªo»ono±¢ jest du»o wi¦ksza ni» O(n + m).

Pomysª: arytmetyka modulo.

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Na podstawie poprzednich rozwa»a« mamy algorytm szukania wzorca o zªo»ono±ci O(n + m).

Ale: operujemy tu na potencjalnie bardzo du»ych liczbach! Zaªo»enie, »e ka»da operacja arytmetyczna zajmuje czas staªy jest zbyt du»ym uproszczeniem, faktyczna zªo»ono±¢ jest du»o wi¦ksza ni» O(n + m).

Pomysª: arytmetyka modulo.

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Na podstawie poprzednich rozwa»a« mamy algorytm szukania wzorca o zªo»ono±ci O(n + m).

Ale: operujemy tu na potencjalnie bardzo du»ych liczbach! Zaªo»enie, »e ka»da operacja arytmetyczna zajmuje czas staªy jest zbyt du»ym uproszczeniem, faktyczna zªo»ono±¢ jest du»o wi¦ksza ni» O(n + m).

Pomysª: arytmetyka modulo.

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Jako q dobieramy tak¡ liczb¦ pierwsz¡, »e 10q (ogólniej dq) mie±ci si¦ w sªowie komputera.

Stosujemy wcze±niejsze wzory w wersji modulo q:

ts+1= (10(ts−hT [s + 1]) + T [s + m + 1]) mod q, gdzie h = 10m−1 mod q.

Teraz faktycznie mo»na obliczy¢ warto±ci p, t0,t1, . . . ,tn−m w czasie O(n + m).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Jako q dobieramy tak¡ liczb¦ pierwsz¡, »e 10q (ogólniej dq) mie±ci si¦ w sªowie komputera.

Stosujemy wcze±niejsze wzory w wersji modulo q:

ts+1= (10(ts−hT [s + 1]) + T [s + m + 1]) mod q, gdzie h = 10m−1 mod q.

Teraz faktycznie mo»na obliczy¢ warto±ci p, t0,t1, . . . ,tn−m w czasie O(n + m).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Jako q dobieramy tak¡ liczb¦ pierwsz¡, »e 10q (ogólniej dq) mie±ci si¦ w sªowie komputera.

Stosujemy wcze±niejsze wzory w wersji modulo q:

ts+1= (10(ts−hT [s + 1]) + T [s + m + 1]) mod q, gdzie h = 10m−1 mod q.

Teraz faktycznie mo»na obliczy¢ warto±ci p, t0,t1, . . . ,tn−m w czasie O(n + m).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ale: problem z porównywaniem liczb.

ts 6=p (mod q) ⇒ ts 6=p, czyli OK. ale nieprawda, »e ts =p (mod q) ⇒ ts =p.

Zatem ka»de s takie, »e ts =p (mod q) musi by¢ dodatkowo zwerykowane przez bezpo±rednie sprawdzenie warunku T [s + 1..s + m] = P[1..m].

Sprawia to, »e w pesymistycznych przypadkach (gdy wzorzec wyst¦puje cz¦sto) algorytm Rabina-Karpa dziaªa w czasie takim jak algorytm naiwny Θ((n − m + 1)m).

W przypadkach optymistycznych, gdy wzorzec wyst¦puje O(1) razy, mamy zªo»ono±¢ O(n + m).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ale: problem z porównywaniem liczb.

ts 6=p (mod q) ⇒ ts 6=p, czyli OK.

ale nieprawda, »e ts =p (mod q) ⇒ ts =p.

Zatem ka»de s takie, »e ts =p (mod q) musi by¢ dodatkowo zwerykowane przez bezpo±rednie sprawdzenie warunku T [s + 1..s + m] = P[1..m].

Sprawia to, »e w pesymistycznych przypadkach (gdy wzorzec wyst¦puje cz¦sto) algorytm Rabina-Karpa dziaªa w czasie takim jak algorytm naiwny Θ((n − m + 1)m).

W przypadkach optymistycznych, gdy wzorzec wyst¦puje O(1) razy, mamy zªo»ono±¢ O(n + m).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ale: problem z porównywaniem liczb.

ts 6=p (mod q) ⇒ ts 6=p, czyli OK. ale nieprawda, »e ts =p (mod q) ⇒ ts =p.

Zatem ka»de s takie, »e ts =p (mod q) musi by¢ dodatkowo zwerykowane przez bezpo±rednie sprawdzenie warunku T [s + 1..s + m] = P[1..m].

Sprawia to, »e w pesymistycznych przypadkach (gdy wzorzec wyst¦puje cz¦sto) algorytm Rabina-Karpa dziaªa w czasie takim jak algorytm naiwny Θ((n − m + 1)m).

W przypadkach optymistycznych, gdy wzorzec wyst¦puje O(1) razy, mamy zªo»ono±¢ O(n + m).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ale: problem z porównywaniem liczb.

ts 6=p (mod q) ⇒ ts 6=p, czyli OK. ale nieprawda, »e ts =p (mod q) ⇒ ts =p.

Zatem ka»de s takie, »e ts =p (mod q) musi by¢ dodatkowo zwerykowane przez bezpo±rednie sprawdzenie warunku T [s + 1..s + m] = P[1..m].

Sprawia to, »e w pesymistycznych przypadkach (gdy wzorzec wyst¦puje cz¦sto) algorytm Rabina-Karpa dziaªa w czasie takim jak algorytm naiwny Θ((n − m + 1)m).

W przypadkach optymistycznych, gdy wzorzec wyst¦puje O(1) razy, mamy zªo»ono±¢ O(n + m).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ale: problem z porównywaniem liczb.

ts 6=p (mod q) ⇒ ts 6=p, czyli OK. ale nieprawda, »e ts =p (mod q) ⇒ ts =p.

Zatem ka»de s takie, »e ts =p (mod q) musi by¢ dodatkowo zwerykowane przez bezpo±rednie sprawdzenie warunku T [s + 1..s + m] = P[1..m].

Sprawia to, »e w pesymistycznych przypadkach (gdy wzorzec wyst¦puje cz¦sto) algorytm Rabina-Karpa dziaªa w czasie takim jak algorytm naiwny Θ((n − m + 1)m).

W przypadkach optymistycznych, gdy wzorzec wyst¦puje O(1) razy, mamy zªo»ono±¢ O(n + m).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

Ale: problem z porównywaniem liczb.

ts 6=p (mod q) ⇒ ts 6=p, czyli OK. ale nieprawda, »e ts =p (mod q) ⇒ ts =p.

Zatem ka»de s takie, »e ts =p (mod q) musi by¢ dodatkowo zwerykowane przez bezpo±rednie sprawdzenie warunku T [s + 1..s + m] = P[1..m].

Sprawia to, »e w pesymistycznych przypadkach (gdy wzorzec wyst¦puje cz¦sto) algorytm Rabina-Karpa dziaªa w czasie takim jak algorytm naiwny Θ((n − m + 1)m).

W przypadkach optymistycznych, gdy wzorzec wyst¦puje O(1) razy, mamy zªo»ono±¢ O(n + m).

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

Algorytm Rabina-Karpa

RabinKarpMatcher(T, P, d, q) 1 begin 2 n := length(T); 3 m := length(P); 4 h := dm−1modq; 5 p := 0; 6 t0 := 0; 7 fori := 1tomdo 8 begin 9 p := (d*p + P[i])modq; 10 t0:= (d*t0+ T[i])modq 11 end; 12 fors := 0ton−mdo 13 begin 14 if p = ts then 15 if T [s + 1..s + m] = P[1..m] then

16 wypisz 'Wzorzec wyst¦puje z przesuni¦ciem' s;

Wyszukiwanie wzorca Kody Humana Geometria obliczeniowa Dodatki

W dokumencie Część 4 (Stron 21-67)

Powiązane dokumenty