Paaiškinkite Knuth-Morris-Pratt subeilės paieškos algoritmo veikimo principą.
sobes.tech AI
Atsakymas iš AI
Knuth-Morris-Pratt (KMP) algoritmas yra sukurtas ieškoti subeilės tekste linijiniu laiku, išvengiant pasikartojančių simbolių palyginimų.
Pagrindinė idėja yra iš anksto apskaičiuoti subeilės prefikso funkcijų masyvą (arba "π-masyvą"), kuris rodo, kiek simbolių sutampa su subeilės pradžia nesėkmingo palyginimo metu. Tai leidžia nesusitaikius, negrįžti į pradžią tekste, o perkelti subeilę į optimalią poziciją.
Pavyzdys:
- Tekstas: "ABABDABACDABABCABAB"
- Ieškoma subeilė: "ABABCABAB"
Algoritmas pirmiausia sukuria prefikso funkciją subeilės, tada pereina per tekstą, lygindamas simbolius. Nesutapimo atveju naudoja prefikso funkciją, kad nustatytų, nuo kurio simbolio tęsti palyginimą, nesikartojant nuo pradžios.
Tai užtikrina O(n + m) sudėtingumą, kur n yra teksto ilgis, m — subeilės ilgis, ir yra efektyvesnis nei naivus paieškos metodas.