Presumo che tutti i lettori di questa domanda abbiano letto entrambi:
La prima cosa da notare è che la randomizzazione dell'hash viene decisa all'avvio dell'interprete.
L'hash di ogni lettera sarà lo stesso per entrambi i set, quindi l'unica cosa che può importare è se c'è una collisione (dove l'ordine sarà influenzato).
Dalle deduzioni di quel secondo collegamento sappiamo che l'array di supporto per questi set inizia alla lunghezza 8:
_ _ _ _ _ _ _ _
Nel primo caso inseriamo 1
:
_ 1 _ _ _ _ _ _
e poi inserisci il resto:
α 1 ? ? ? ? ? ?
Quindi viene modificato alla dimensione 32:
1 can't collide with α as α is an even hash
↓ so 1 is inserted at slot 1 first
? 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
Nel secondo caso, inseriamo il resto:
? β ? ? ? ? ? ?
E poi prova a inserire 1:
Try to insert 1 here, but will
↓ be rehashed if β exists
? β ? ? ? ? ? ?
E poi sarà rimescolato:
Try to insert 1 here, but will
be rehashed if β exists and has
↓ not rehashed somewhere else
? β ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
Quindi se gli ordini di iterazione sono diversi dipende esclusivamente dall'esistenza di β.
La possibilità di un β è la possibilità che una qualsiasi delle 5 lettere abbia hash a 1 modulo 8 e hash a 1 modulo 32.
Poiché tutto ciò che ha un hash a 1 modulo 32 ha anche un hash a 1 modulo 8, vogliamo trovare la possibilità che dei 32 slot, uno dei cinque sia nello slot 1:
5 (number of letters) / 32 (number of slots)
5/32 è 0,15625, quindi c'è una probabilità del 15,625 %¹ che gli ordini siano diversi tra le due costruzioni dell'insieme .
Non molto stranamente, questo è esattamente ciò che ha misurato Zero Pireo.
¹Tecnicamente anche questo non è ovvio. Possiamo fingere ognuno dei 5 hash in modo univoco a causa del rehashing, ma a causa del sondaggio lineare è effettivamente più probabile che si verifichino strutture "raggruppate" ... ma poiché stiamo solo esaminando se un singolo slot è occupato, questo non in realtà ci influenzano.