Rozważ mało pojedynczo połączoną listę w czysto funkcjonalnym otoczeniu. Jego pochwały śpiewano ze szczytów górskich i nadal będą śpiewane. Zajmę się tutaj jedną z wielu jego mocnych stron i pytaniem, w jaki sposób można ją rozszerzyć na szerszą klasę czysto funkcjonalnych sekwencji opartych na drzewach.
Problem jest następujący: Chcesz przetestować prawie pewną strukturalną równość w czasie O (1) za pomocą silnego skrótu. Jeśli funkcja skrótu jest strukturalnie rekurencyjna, tj. Hash (x: xs) = mix x (hash xs), wówczas możesz transparentnie buforować wartości skrótu na listach i aktualizować je w czasie O (1), gdy element zostanie skonwertowany na istniejącą listę . Większość algorytmów dla list skrótów jest strukturalnie rekurencyjna, więc takie podejście jest wyjątkowo przydatne w praktyce.
Załóżmy jednak, że zamiast pojedynczo połączonych list masz sekwencje drzewiaste, które obsługują konkatenację dwóch sekwencji o długości O (n) w czasie O (log n). Aby buforowanie skrótów działało tutaj, funkcja mieszania skrótów musi być asocjatywna, aby przestrzegać stopni swobody drzewa w reprezentowaniu tej samej sekwencji liniowej. Mikser powinien pobrać wartości skrótu poddrzewa i obliczyć wartość skrótu całego drzewa.
Właśnie tam byłem sześć miesięcy temu, kiedy spędziłem dzień nad rozmyślaniem i badaniem tego problemu. Wydaje się, że w literaturze nie zwrócono uwagi na struktury danych. Natknąłem się na algorytm haszujący Tillicha-Zemora z kryptografii. Opiera się na mnożeniu macierzy 2x2 (co jest asocjacyjne), gdzie bity 0 i 1 odpowiadają dwóm generatorom subalgebry z wpisami w polu Galois.
Moje pytanie brzmi: co przegapiłem? W literaturze na temat kryptografii i struktur danych muszą znajdować się dokumenty istotne, których nie udało mi się znaleźć podczas wyszukiwania. Wszelkie uwagi dotyczące tego problemu i możliwych miejsc do zbadania będą mile widziane.
Edycja: Interesuje mnie to pytanie zarówno na miękkich, jak i kryptograficznie mocnych końcach spektrum. Z drugiej strony można go stosować do tablic mieszających, w których należy unikać kolizji, ale nie są one katastrofalne. Z drugiej strony można go wykorzystać do testowania równości.
Prawie uniwersalna rodzina funkcji mieszających
źródło
źródło