Diciamo che mi piacerebbe creare un insieme non ordinato di multiset non ordinati di int unsigned. Per questo, ho bisogno di creare una funzione di hash per calcolare un hash del multiset non ordinato. In effetti, deve essere buono anche per CRC.Algoritmo per hash/crc del multiset non ordinato
Una soluzione ovvia è mettere gli elementi in vettoriale, ordinarli e restituire un hash del risultato. Questo sembra funzionare, ma è costoso.
Un altro approccio è quello di xor i valori, ma ovviamente se ho un elemento due volte o nessuno il risultato sarà lo stesso - che non è buono.
Qualche idea su come posso implementare questo più economico - Ho un'applicazione che lo farà migliaia per migliaia di serie e relativamente grandi.
È possibile modificare i multiset in modo che possano ricalcolare gli hash in fase di inserimento/rimozione? Quindi se hai bisogno di fare ricerche più volte non devi continuare a ricalcolare gli hash. –
Tecnicamente sì, ma come questo aiuta? – gsf
Poiché il valore memorizzato nella cache potrebbe semplicemente essere * letto *, non è necessario calcolarlo migliaia di volte. –