Wyszukiwanie wzorca w tekście – Algorytm naiwny

Algorytm naiwny jest jednym z najprostszych sposobów wyszukiwania wzorca w tekście. Jego prostota polega na tym, że porównuje wzorzec z każdą możliwą pozycją w tekście bez żadnych zaawansowanych optymalizacji. Mimo że nie jest najbardziej wydajnym rozwiązaniem (szczególnie dla dużych tekstów), jest intuicyjny i łatwy do zrozumienia.

1. Opis algorytmu naiwnego

Załóżmy, że mamy tekst T o długości n i wzorzec P o długości m, gdzie n >= m. Algorytm naiwny polega na przesuwaniu wzorca P wzdłuż tekstu T, znak po znaku, i sprawdzaniu, czy w danej pozycji wzorzec w pełni odpowiada fragmentowi tekstu.

  1. Rozpoczynamy od sprawdzenia, czy wzorzec pasuje do pierwszego fragmentu tekstu, zaczynającego się na pozycji 0.
  2. Następnie przesuwamy wzorzec o jedną pozycję i ponownie sprawdzamy dopasowanie.
  3. Proces powtarzamy, aż wzorzec zostanie porównany z wszystkimi możliwymi pozycjami w tekście.

2. Złożoność czasowa

Algorytm naiwny ma złożoność czasową O(n * m), gdzie:

  • n to długość tekstu,
  • m to długość wzorca.

W najgorszym przypadku, dla każdego z n - m + 1 przesunięć, algorytm wykonuje porównanie wszystkich m znaków wzorca z odpowiadającym fragmentem tekstu.

3. Pseudokod algorytmu

Poniżej znajduje się prosty pseudokod dla algorytmu naiwnego:


4. Implementacja algorytmu naiwnego w Pythonie

Poniżej znajduje się implementacja algorytmu naiwnego w języku Python.

W tym przykładzie algorytm przeszukuje tekst w celu znalezienia wszystkich wystąpień słowa „kot”. W przypadku dopasowania wzorca, algorytm zwraca pozycję, od której zaczyna się wzorzec w tekście.

5. Przykład działania

Załóżmy, że mamy tekst:
"Ala ma kota, a kot ma Alę"

Oraz wzorzec:
"kot"

Algorytm zaczyna od pierwszej pozycji w tekście i porównuje fragment o długości wzorca (czyli 3 znaki) z wzorcem. Jeśli wzorzec nie pasuje, przesuwa się o jeden znak i powtarza proces, aż znajdzie dopasowanie.

W wyniku tego procesu algorytm znajdzie dopasowanie na pozycji 7 oraz 15, gdzie występuje słowo „kot”.

6. Zalety i wady algorytmu naiwnego

Zalety:
  • Łatwy do implementacji.
  • Nie wymaga skomplikowanej struktury danych.
  • Intuicyjny do zrozumienia, co sprawia, że jest idealny do nauki podstaw wyszukiwania wzorców.
Wady:
  • Wydajność: Dla dużych tekstów i długich wzorców algorytm działa wolno, ponieważ porównuje każdą możliwą pozycję w tekście, nawet jeśli część porównań można by było pominąć.
  • Brak optymalizacji: Algorytm nie wykorzystuje żadnych informacji o wzorcu do optymalizacji porównań.

7. Podsumowanie

Algorytm naiwny jest podstawowym rozwiązaniem problemu wyszukiwania wzorca w tekście. Jego największą zaletą jest prostota i łatwość implementacji, jednak w przypadku dużych tekstów i wzorców staje się nieefektywny. W praktyce, bardziej zaawansowane algorytmy, takie jak KMP (Knutha-Morrisa-Pratta) czy algorytm Boyera-Moore’a, oferują lepszą wydajność dzięki wykorzystaniu dodatkowych informacji o wzorcu.

Mimo to algorytm naiwny jest doskonałym punktem wyjścia do zrozumienia problemu wyszukiwania wzorców i stanowi bazę do nauki bardziej zaawansowanych metod.

Was this helpful?

0 / 0