Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Anagramy – definicje i sposób analizowania

Prostym sposobem sprawdzenia, czy dwa wyrazy są anagramamianagramanagramami, jest próba ułożenia wszystkich liter składających się na jeden wyraz w taki sposób, aby otrzymać drugie słowo. Jeżeli próba zakończy się powodzeniem, uzyskujemy pewność, że sprawdzane wyrazy są anagramami.

Wykorzystując przedstawioną metodę sprawdź, czy w zapisanych niżej parach jeden wyraz jest anagramem drugiego:

  • wektor – wtorek

  • makrela – reklama

  • łoś – stolik

  • bryka – rybak

Trzy spośród czterech podanych par wyrazów są anagramami. Nie dotyczy to tylko wyrazów „łoś” i „stolik”. W przypadku tej właśnie pary od razu stwierdzimy, że jeden wyraz nie może być anagramem drugiego. Powód jest oczywisty: liczba liter w obu słowach jest różna. Nie ma znaczenia, w jaki sposób będziemy je przestawiać – na pewno nie uda nam się przekształcić jednego wyrazu w drugi.

Słowa będące anagramami zawierają taką samą liczbę identycznych liter. Wykorzystamy to spostrzeżenie podczas projektowania algorytmu pozwalającego sprawdzić, czy dwa wyrazy są anagramami.

Anagramami mogą być nie tylko pary wyrazów, ale także pary zdań. Muszą one spełniać te same warunki co słowa, jednak dwa zdania są anagramami nawet wtedy, gdy liczba składających się na nie wyrazów jest inna. Jest to istotne, ponieważ oznacza, że dwa ciągi znaków mogą zawierać różną liczbę spacji, a zarazem być anagramami.

Algorytm do analizowania anagramów: krok 1

Napiszmy algorytm pozwalający sprawdzić, czy dwa wyrazy są anagramami. Wiemy już, że aby tak było, słowa muszą mieć identyczną długość.

Sprawdzimy to od razu – gdyby okazało się, że wyrazy zawierają różną liczbę znaków, na pewno nie są anagramami:

Linia 1. pierwszyWyraz znak równości cudzysłów arbuz cudzysłów. Linia 2. drugiWyraz znak równości cudzysłów kiwi cudzysłów. Linia 4. jeżeli długość otwórz nawias okrągły pierwszyWyraz zamknij nawias okrągły wykrzyknik znak równości długość otwórz nawias okrągły drugiWyraz zamknij nawias okrągły wykonaj dwukropek. Linia 5. wypisz cudzysłów Słowa nie są anagramem cudzysłów. Linia 6. zakończ program.

Zwróć uwagę na linię numer 4. Została w niej zapisana instrukcja warunkowa, która pozwala wykluczyć słowa o różnej długości.

Na razie nie wiemy jednak jak sprawdzić, czy dwa wyrazy o identycznej długości są anagramami. Wiemy natomiast, że anagramy zawierają tę samą liczbę tych samych liter. Wykorzystajmy tę cechę anagramów.

Algorytm do analizowania anagramów: krok 2

Posłużymy się parą wyrazów „arbuz – burza”. Posortujemy alfabetycznie litery w obydwu słowach:

arbuz → abruz

burza → abruz

Wynikiem sortowania jest przekształcenie obydwu wyrazów w dwa ciągi znaków (liter) ułożonych w porządku alfabetycznym. Jeżeli – tak jak w naszym przykładzie – sekwencje te są są identyczne, mamy pewność, że dwa sprawdzane wyrazy są anagramami.

Dopiszmy zatem do algorytmu instrukcje sortowania i porównywania otrzymanych ciągów liter:

Linia 1. pierwszyWyraz znak równości cudzysłów arbuz cudzysłów. Linia 2. drugiWyraz znak równości cudzysłów kiwi cudzysłów. Linia 4. jeżeli długość otwórz nawias okrągły pierwszyWyraz zamknij nawias okrągły wykrzyknik znak równości długość otwórz nawias okrągły drugiWyraz zamknij nawias okrągły to. Linia 5. wypisz cudzysłów Słowa nie są anagramem cudzysłów. Linia 6. zakończ program. Linia 8. jeżeli sortujAlfabetycznie otwórz nawias okrągły pierwszyWyraz zamknij nawias okrągły znak równości znak równości sortujAlfabetycznie otwórz nawias okrągły drugiWyraz zamknij nawias okrągły wykonaj dwukropek. Linia 9. wypisz cudzysłów Słowa są anagramem cudzysłów. Linia 10. zakończ program.

Ponieważ w czasie bieżącej lekcji nie zajmujemy się algorytmami sortującymialgorytm sortującyalgorytmami sortującymi, nie będziemy pisać własnej implementacji mechanizmu sortowania alfabetycznego. W pseudokodzie użyliśmy funkcji sortujAlfabetycznie(), która jako argument przyjmuje badany wyraz, a jako wynik zwraca ciąg liter posortowanych w kolejności alfabetycznej.

Nasz algorytm jest już prawie gotowy. Aby jednak można go było wykorzystać nie tylko w przypadku wyrazów, ale również całych zdań, musimy wprowadzić kilka usprawnień.

Różnica między sprawdzaniem wyrazów a sprawdzaniem zdań polega na tym, że w zdaniach pojawiają się spacje (a także znaki interpunkcyjne, ale w tej implementacji algorytmu je pominiemy). Spacje nie mają wpływu na to, czy dwa zdania są anagramami. Możemy więc usunąć takie znaki. Wykorzystamy funkcję usunSpacje(), która zwraca przekazany jej ciąg wyrazów pozbawiony znaków spacji.

Nadamy ponadto inne nazwy używanym dotychczas zmiennym pierwszyWyrazdrugiWyraz. Zastąpią je zmienne pierwszyCiagZnakowdrugiCiagZnakow – takie nazwy opisują zarówno wyrazy, jak i całe zdania. Jest to modyfikacja czysto kosmetyczna, ale mimo to warta zastosowania.

Oto zapis gotowego algorytmu:

Linia 1. pierwszyCiagZnakow znak równości usunSpacje otwórz nawias okrągły cudzysłów arbuz cudzysłów zamknij nawias okrągły. Linia 2. drugiCiagZnakow znak równości usunSpacje otwórz nawias okrągły cudzysłów kiwi cudzysłów zamknij nawias okrągły. Linia 4. jeżeli długość otwórz nawias okrągły pierwszyCiagZnakow zamknij nawias okrągły wykrzyknik znak równości długość otwórz nawias okrągły drugiCiagZnakow zamknij nawias okrągły wykonaj dwukropek. Linia 5. wypisz cudzysłów Słowa nie są anagramem cudzysłów. Linia 6. zakończ program. Linia 8. jeżeli sortujAlfabetycznie otwórz nawias okrągły pierwszyCiagZnakow zamknij nawias okrągły znak równości znak równości sortujAlfabetycznie otwórz nawias okrągły drugiCiagZnakow zamknij nawias okrągły wykonaj dwukropek. Linia 9. wypisz cudzysłów Słowa są anagramem cudzysłów. Linia 10. zakończ program.

Sortowanie alfabetyczne i porównywanie otrzymanych ciągów liter nie jest jedyną metodą sprawdzenia, czy dwa zdania lub wyrazy są anagramami. W dalszej części lekcji poznasz implementację innego algorytmu. Zanim do niej przejdziesz, przypomnij sobie jednak, czym jest kod ASCIIkod ASCIIkod ASCII. Wiedza ta okaże się bowiem niezbędna podczas omawiania kolejnej metody znajdowania anagramów.

Pozostałe materiały z serii

6,66,6,6,6

Słownik

kod ASCII
kod ASCII

(ang. American Standard Code for Information Interchange) siedmiobitowy system kodowania znaków używany w systemach komputerowych; liczbom z zakresu 0−127 przyporządkowane są litery alfabetu łacińskiego, cyfry, znaki przestankowe i inne symbole

algorytm sortujący
algorytm sortujący

algorytm wykorzystywany w celu uporządkowania danych w określony sposób

anagram
anagram

wyraz, wyrażenie bądź całe zdanie powstałe dzięki przestawieniu liter bądź sylab innego wyrazu lub zdania, wykorzystujące wszystkie litery tekstu oryginalnego