I_P_W14_M15_C++ Algorytmy tekstowe w języku C++
Program realizujący algorytm wyszukiwania wzorca w tekście metodą naiwną
Specyfikacja algorytmu:
Znaleźć wszystkie pozycje w tekście, na których występuje zadany wzorzec (ciąg znaków).
Dane wejściowe:
tekst– ciąg znaków, w którym szukamy wzorca (np. sekwencja DNA, zdanie, kod).wzorzec– ciąg znaków, który chcemy znaleźć w tekście.
Dane wyjściowe:
Lista pozycji (indeksów), na których wzorzec występuje w tekście.
Jeśli wzorzec nie występuje – informacja o jego braku.
Złożoność obliczeniowa:
Czasowa: O(n × m), gdzie:
n– długość tekstu,m– długość wzorca.
Pamięciowa: O(1) – nie wymaga dodatkowej pamięci poza zmiennymi pomocniczymi.
Oto szczegółowe omówienie programu w C++, który realizuje naiwne wyszukiwanie wzorca w tekście. Przeanalizujmy go linijka po linijce, aby zrozumieć każdy element.
1. Nagłówki i przestrzeń nazw
Dodajemy biblioteki potrzebne do pracy z tekstem i wejściem/wyjściem.
2. Definicja funkcji wyszukującej
Funkcja przyjmuje dwa argumenty typu string: tekst – to ciąg znaków, w którym szukamy wzorca, wzorzec – to ciąg znaków, który próbujemy znaleźć.
3. Obliczenie długości tekstu i wzorca
Obliczamy długości tekstu i wzorca, by wiedzieć, ile razy możemy przesunąć wzorzec w tekście.n – liczba znaków w tekście, m – liczba znaków we wzorcu
4. Główna pętla przeszukująca tekst
for (int i = 0; i <= n - m; i++) Przesuwamy wzorzec po tekście – od początku do miejsca, gdzie jeszcze może się zmieścić.
for (j = 0; j < m; j++) Porównujemy znak po znaku wzorzec z fragmentem tekstu zaczynającym się od pozycji i.
5. Porównywanie znaków wzorca z tekstem
if (tekst[i + j] != wzorzec[j]) break;
Jeśli którykolwiek znak się nie zgadza – przerywamy porównywanie.
if (j == m)
Jeśli udało się porównać wszystkie znaki wzorca – mamy trafienie!
cout << "Wzorzec znaleziony na pozycji: " << i << endl; Wyświetlamy informację o znalezieniu wzorca.
Wynik działania programu: