Sto cercando un generatore di famiglie di funzioni hash che possa generare una famiglia di funzioni hash data una serie di parametri. Non ho trovato nessun generatore di questo tipo finora. C'è un modo per farlo con il pacchetto hashlib
?generatore di famiglie di funzioni hash in python
Per esempio mi piacerebbe fare qualcosa di simile:
h1 = hash_function(1)
h2 = hash_function(2)
...
e h1
e h2
sarebbero diverse funzioni di hash.
Per quelli di voi che potrebbero saperlo, sto cercando di implementare un algoritmo min-hashing su un set di dati molto grande.
Fondamentalmente, ho un insieme molto ampio di funzionalità (da 100 milioni a 1 miliardo) per un dato documento, e ho bisogno di creare da 1000 a 10000 permutazioni casuali diverse per questo insieme di funzionalità.
Non voglio costruire le permutazioni casuali esplicitamente così la tecnica che vorrebbe utilizzare il seguente:
- generare una funzione di hash
h
e considerare che per due indicir
es
r
appare prima dis
nella permutazione seh(r) < h(s)
e farlo per 100 a 1000 diverse funzioni hash.
Esistono librerie note che potrei aver perso? O qualsiasi modo standard di generare famiglie di funzioni di hash con Python di cui potresti essere a conoscenza?
Grazie per questa risposta. Sembra funzionare alla grande. Qualche particolare per l'utilizzo di quel tipo di funzioni hash? efficienza? produrrà delle permutazioni approssimative molto diverse in un certo senso? –
Il 'hash' incorporato è decente e abbastanza efficiente - l'invio di un numero dipendente (ma in modo sufficientemente caotico) dall'indice all'interno della famiglia sembra un altro modo decente/efficiente per trasformare quella funzione hash in una famiglia. Se la velocità non è un problema, potrei usare un hashing più forte (crypto-quality), immagino - questo probabilmente ti darà una qualità superiore (né hash né random sono cripto-quality e quindi neanche il loro XOR ;-) ma l'impatto della velocità è VERAMENTE grande (ordini di grandezza ...). –
Grazie. In realtà, credo che la velocità sarà la chiave per me qui. L'unica "qualità" che sto cercando è che le funzioni di hash generino "tanto diverse" permutazioni casuali il più possibile (non sono sicuro di quantificare questo però ...) con il processo che ho descritto nella mia domanda originale. Ancora una volta, grazie mille per la tua grande risposta. –