Poszukuję generatora funkcji funkcji skrótu, który może generować rodzinę funkcji mieszających, biorąc pod uwagę zestaw parametrów. Nie znalazłem dotąd żadnego takiego generatora. Czy można to zrobić z pakietem hashlib
?funkcje generatora funkcji skrótu w pytonie
Na przykład chciałbym zrobić coś takiego:
h1 = hash_function(1)
h2 = hash_function(2)
...
i h1
i h2
byłyby różne funkcje hash.
Dla tych z Państwa, którzy mogą o tym wiedzieć, próbuję wprowadzić algorytm min-haszowania na bardzo dużym zbiorze danych.
Zasadniczo mam bardzo duży zestaw funkcji (od 100 milionów do 1 miliarda) dla danego dokumentu i muszę utworzyć od 1000 do 10000 różnych losowych permutacji dla tego zestawu funkcji.
nie chcę budować losowych permutacji wyraźnie więc technika chciałbym używać w następujących przypadkach:
- generowania funkcji skrótu
h
i uważają, że dla dwóch wskaźnikówr
is
r
pojawia się przeds
w permutacji, jeślih(r) < h(s)
i zrobić to dla 100 do 1000 różnych funkcji skrótu.
Czy są jakieś znane biblioteki, które mogłem pominąć? Lub jakikolwiek standardowy sposób generowania rodzin funkcji skrótu z pythoniem, o którym być może wiesz?
Dziękuję za tę odpowiedź. Wydaje się działać świetnie. Jakieś szczególne zastosowanie tego typu funkcji skrótu? wydajność? przyniesie w pewnym sensie bardzo różne przybliżone permutacje? –
Wbudowany 'hash' jest przyzwoity i dość wydajny - xor'ing go z liczbą zależną (ale w wystarczająco chaotyczny sposób) od indeksu w rodzinie wydaje się po prostu przyzwoity/skuteczny sposób na zamianę tej jednej funkcji skrótu w rodzinę. Jeśli prędkość nie jest problemem, możesz użyć silniejszego (krypto-jakościowego) haszu, jak sądzę - to prawdopodobnie da ci wyższą jakość (ani hash, ani losowo nie są krypto-jakością, a więc ani ich XOR ;-), ale wpływ prędkości jest NAPRAWDĘ duże (rzędy wielkości ...). –
Dzięki. Właściwie wierzę, że prędkość będzie dla mnie kluczowa. Jedyną "jakością", której szukam, jest to, że funkcje mieszające generują "jak różne" przypadkowe permutacje, jak to tylko możliwe (nie jestem pewien, jak to wyrazić ilościowo ...) w procesie opisanym w moim pierwotnym pytaniu. Jeszcze raz bardzo dziękuję za wspaniałą odpowiedź. –