Rabinův–Karpův algoritmus

(přesměrováno z Algoritmus Rabin-Karp)

Rabin–Karpův algoritmus je v informatice jedním z algoritmů pro vyhledávání textu. Vytvořili ho Michael O. Rabin a Richard M. Karp v roce 1987. Algoritmus hledá řadu vzorků najednou a používá k tomu hašovací funkci. Pro text délky n a p vzorků společné délky m je jeho průměrná a nejlepší složitost O(n+m) v prostoru O(p) a jeho nejhorší složitost je O(nm).

Praktické využití Rabinova-Karpova algoritmu je odhalování plagiátorství. Vzhledem k množství hledaných řetězců jsou algoritmy, které vyhledávají jeden řetězec, nepraktické.

Použití hašovací funkce

editovat

Klíčem k výkonu Rabinova-Karpova algoritmu je efektivní výpočet vrácených hodnot hašovací funkce u podřetězců v textu. Jedna populární a efektivní hašovací funkce považuje každý podřetězec jako číslo nějakého základu obvykle velikosti prvočísla. Například když máme podřetězec "hi" a základ je 101, tak bude vrácená hodnota 104 × 1011 + 105 × 1010 = 10609 (v ASCII je za 'h' 104 a za 'i' je 105).

Příklad Rabinova-Karpova algoritmu

editovat

Pokud chceme najít některé z velkých čísel k s pevnou délkou vzorků v textu, můžeme vytvořit jednoduchou variantu Rabinova-Karpova algoritmu použitím Bloomova filtru.

function RabinKarpSet(string s[1..n], set of string subs, m):
     set hsubs := emptySet
     for each sub in subs
         insert hash(sub[1..m]) into hsubs
     hs := hash(s[1..m])
     for i from 1 to n-m+1
         if hs ∈ hsubs and s[i..i+m-1] ∈ subs
             return i
         hs := hash(s[i+1..i+m])
     return not found

Předpokládáme, že všechny podřetězce mají pevnou délku m.

Reference

editovat

V tomto článku byl použit překlad textu z článku Rabin–Karp algorithm na anglické Wikipedii.

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy