Zadanie 2 lista 6

Mam problem wymyśleniem ‘szybkiego rozwiązania’.
Treść:
Zadanie 2.(1pkt)
Parę wyrazów nazwiemy wzajemnie odwrotnymi, jeżeli pierwszy z nich jest
równy drugiemu przeczytanemu wspak. Przykładowo: zakop oraz pokaz. Na stronie wykładu jest
plik z polskimi słowami, Twoim zadaniem jest napisać program, który wypisuje wszystkie wzajemnie
odwrotne pary słów. Każda para powinna być wypisana raz (czyli jeżeli wypisałeś parę zakop-
pokaz, to nie powinieneś wypisywać pary pokaz-zakop). Uwaga: program powinien działać szybko,
zastanów się jak unikn¡ć pętli w pętli (do generowania wszystkich par słów).

W tej chwili przetwarzam plik w pętli, dla każdej iteracji wrzucam do tablicy słów i sprawdzam czy wystąpiła już odwrotność.
Ale jest to rozwiązanie ‘wolne’, a nawet bardzo wolne.
Próbowałem robić drugą tablicę z indeksami słów po ich długości, ale zmniejsza to czas jedynie ok. 30krotnie, zastanawiałem się czy jeszcze bardziej nie rozdrobnić tablicy indeksów, i sortować słowa nie tylko po liczbie znaków, ale jeszcze po pierwszej literze, ale w najlepszym wypadku byłoby to kolejne 30tokrotne zmniejszenie.
Jakaś alternatywa? :smiley:
Jest prawie 2 mln słów do przejrzenia. :expressionless:

Może utworzenie tablicy odwróconych wyrazów, posortowanie obu (O(2nlogn) lub liniowo przy sortowaniu pozycyjnym) i przechodzenie wskaźnikami po obu listach od góry?

1 polubienie

Pamiętam taką wskazówkę, gdy 3 lata temu robiłem ten przedmiot: wykorzystaj słownik. Jest to szybka struktura danych - dodawanie elementu czy sprawdzanie klucza odbywa się średnio w czasie stałym :slight_smile:

3 polubienia

Zastanawiałem się właśnie czy robić coś z drugą, odwróconą tablicą, ale nie wiedziałem co. ;p
Wykorzystałem jednak słownik, jak pisał @ref i kompletnie nie oszczędną metodą zajmuje to sekundy.
Dzięki. :slight_smile: