Anagramy – algorytm sprawdzania anagramów w Pythonie, C++ i Java

Anagramy często pojawiają się na maturze z informatyki. Jest to więc temat, z którym dobrze jest się zapoznać, jeśli czeka Cię egzamin maturalny z tego przedmiotu. Poniżej zobaczysz na jakiej zasadzie działa sprawdzanie anagramów, a także jak wygląda implementacja algorytmu w ramach Python, C++ i Java.

Co to anagramy – definicja

Anagramy to pojęcie często pojawiające się na maturze. Są to wyrazy lub zdania, które po przestawieniu liter tworzą inny wyraz lub inne zdanie.

Anagramy przykłady 

  • kottko
  • stółtłós
  • marzzamr
  • ratytyra

Sprawdzanie, czy jeden wyraz jest anagramem drugiego, można wykonać na kilka sposobów. Najprostszym, lecz czasochłonnym, jest sprawdzenie wszystkich permutacji liter. Inną metodą jest sortowanie liter w obu napisach i porównanie wyników — jednak takie rozwiązanie bywa mało wydajne, a w pseudokodzie maturalnym często nie ma dostępu do funkcji sortujących.

Najefektywniejszą metodą, często używaną na maturze, jest zliczanie wystąpień liter w dwóch napisach. Wystarczy użyć tablicy o 26 elementach (dla liter alfabetu angielskiego) i kodów ASCII. Odejmując kod litery ‘a’ od kodu danej litery, uzyskujemy jej pozycję w alfabecie (czyli indeks tablicy).

ads banner

Sprawdzanie anagramów – Implementacja

Dzięki wykorzystaniu możliwości liczenia poszczególnych znaków, możliwe jest szybkie i efektywne sprawdzenie, czy jeden ciąg jest przestawieniem drugiego, a więc jego anagramem.

Sprawdzanie anagramów – pseudokod

Dane:

  • napis1 – pierwszy napis o długości n1, zawiera tylko małe litery alfabetu angielskiego
  • napis2 – drugi napis o długości n2, zawiera tylko małe litery alfabetu angielskiego

Wynik:

  • czyAnagram – wartość logiczna: prawda lub fałsz, w zależności od tego, czy napis1 i napis2 są anagramami

Opis sprawdzania anagramów – Pseudokod

  • 1 linia – inicjalizacja tablicy zliczacz1 o długości 26, służącej do zliczania wystąpień liter w pierwszym napisie.
  • 2 linia – inicjalizacja tablicy zliczacz2 o długości 26, służącej do zliczania wystąpień liter w drugim napisie.
  • 3 linia – rozpoczęcie pętli dla i = 1 do 26 w celu wyzerowania wszystkich elementów tablicy zliczacz1.
  • 4 linia – ustawienie elementu zliczacz1[i] na 0.
  • 5 linia – ustawienie elementu zliczacz2[i] na 0.
  • 6 linia – rozpoczęcie pętli dla i = 1 do n1, aby przejść po wszystkich literach pierwszego napisu.
  • 7 linia – zwiększenie odpowiedniego elementu w tablicy zliczacz1 w zależności od kodu ASCII aktualnej litery napisu1.
  • 8 linia – rozpoczęcie pętli dla i = 1 do n2, aby przejść po wszystkich literach drugiego napisu.
  • 9 linia – zwiększenie odpowiedniego elementu w tablicy zliczacz2 w zależności od kodu ASCII aktualnej litery napisu2.
  • 10 linia – inicjalizacja zmiennej czyAnagram jako prawda, zakładając początkowo, że napisy są anagramami.
  • 11 linia – rozpoczęcie pętli dla i = 1 do 26 w celu porównania liczby wystąpień każdej litery w obu napisach.
  • 12 linia – sprawdzenie, czy liczba wystąpień danej litery w zliczacz1 jest różna od liczby w zliczacz2.
  • 13 linia – jeśli liczby są różne, ustawienie czyAnagram na fałsz, ponieważ napisy nie są anagramami.
  • 14 linia – natychmiastowe zwrócenie wartości czyAnagram po wykryciu różnicy.
  • 15 linia – zwrócenie wartości czyAnagram po zakończeniu pętli, jeśli wszystkie litery występują w tej samej liczbie w obu napisach.

Sprawdzanie anagramów – Python, C++ i Java

Sprawdzanie anagramów – Python

Sprawdzanie anagramów – C++

Sprawdzanie anagramów – Java

W przypadku pojawienia się wielkich liter należy albo wszystkie duże litery traktować jak małe i zliczać je jako małe np. funkcja lower() w pythonie służy właśnie do tego. Można też zwiększyć 2 razy naszą tablicę (lub zrobić 2 osobne) i odpowiednio odejmować kod ASCII litery ‘a’ lub ‘A’, jednak jest to trochę niepraktyczne. Jeśli interesują Cię lepsze metody zliczania elementów, w tym liter możesz przeczytać nasz artykuł o zliczaniu liter.

Najczęściej zadawane pytania o anagramy

Jakie są przykłady anagramów?

Przykłady anagramów:

  • drzewo – wozerd
  • książka – kasiżąk
  • samochód – dósamohc
  • jabłko – okjałb
  • przyjaciel – leirzypajc
ads banner