Informatyka · Zakres podstawowy

Teksty — porównywanie i szukanie wzorca

Wyszukiwarka w notatce musi znaleźć słowo również wtedy, gdy występuje kilka razy. Zobaczmy, jak robi to najprostszy algorytm.

  • Przewidź
  • Sprawdź
  • Wyjaśnij

Po tej lekcji: Porównasz napisy i znajdziesz wszystkie wystąpienia wzorca, także nakładające się.

Zakres podstawowy · materiał otwarty

Równe napisy czy kolejność?

== sprawdza identyczną zawartość, a < porównuje napisy leksykograficznie według wartości znaków Unicode. To nie zawsze polski porządek słownikowy. Wielkość liter i spacje mają znaczenie: Ala i ala różnią się. casefold() może pomóc w porównaniu bez wielkości liter, ale świadomie decyduj, co normalizujesz.

Porównaj dwie wiadomości

przyklad.pypython
print("kot" == "kot")
print("kot" == "Kot")
print("kot" < "kotek")
print("ALA".casefold() == "ala".casefold())
Wynik
True
False
True
True

Sprawdź w działaniu

Przesuń okienko po tekście

Dla ABABA szukaj ABA. Przesuwaj początek o jeden znak, nawet po znalezieniu zgodności.

Ta interakcja wymaga włączonego JavaScriptu.

Najpierw przewidź wynik, potem sprawdź i wyjaśnij różnicę.

Każda możliwa pozycja początku

przyklad.pypython
tekst = "ABABA"
wzorzec = "ABA"
pozycje = []
for start in range(len(tekst) - len(wzorzec) + 1):
    zgodny = True
    for j in range(len(wzorzec)):
        if tekst[start + j] != wzorzec[j]:
            zgodny = False
            break
    if zgodny:
        pozycje.append(start)
print(*pozycje)
Wynik
0 2

Dlaczego jest +1?

Ostatni dopuszczalny początek to n−m, ale range nie obejmuje prawej granicy. Gdy wzorzec jest dłuższy od tekstu, pętla nie rusza. W zadaniach wzorzec nie jest pusty; pusty wzorzec wymaga osobnej umowy. Najgorszy koszt wynosi O(n·m), np. gdy porównania długo pasują, a różnią się dopiero na końcu.

Ćwiczenie z pomocą · samodzielna praca

Nie zgub nakładania

Znajdź AA w AAAA. Narysuj każde okienko i podaj początki numerowane od zera.

Oczekiwany rezultat
0 1 2
Potrzebujesz pomocy? Rozwiązuj krok po kroku.
Krok 1 — pokaż podpowiedź

Okienko ma dwa znaki.

Krok 2 — pokaż podpowiedź

Możesz zacząć w pozycjach 0,1,2.

Krok 3 — pokaż podpowiedź

Po dopasowaniu przesuwasz się o jeden, nie o dwa.

Otwórz tylko tyle podpowiedzi, ile potrzebujesz. Po każdym kroku wróć do zadania i sprawdź wynik.

Podsumowanie

Zapamiętaj

  1. Porównanie jest zależne od znaków i ich wielkości.
  2. Naiwne szukanie bada każdy możliwy początek.
  3. Wystąpienia mogą się nakładać.

Po zalogowaniu zobaczysz dodatkowe lekcje i materiały oznaczone jako rozszerzenie. Podstawowe quizy i zadania pozostają dostępne w biurku.

Dalej na swoim koncie

Rozgrzewki, quiz i zadania są w biurku ucznia.

Teoria jest otwarta dla wszystkich. Żeby rozwiązywać zadania, zapisywać szkice i widzieć swój postęp, zaloguj się.

Zaloguj się →
Źródła i dalsza nauka