你好 Christoph,
Oh weh, ich sollte das aufmalen, nur wie?
Ja, ich wohl auch....
Eine Kollision durch die Funktion h(x)=y wird verarbeitet, indem statt
der sonst üblichen LLs eine weiter Hashtabelle drangehangen wird.
Soweit richtig.
Bei der ersten Kollision ist die aber noch komplett leer.
Bei der ersten Kollision muessen zwei Werte in eine bis dahin leere
Hash-Tabelle gelegt werden, um es mal zu praezisieren.
Egal welche Hashfunktion Du nimmst (vorausgesetzt sie trifft am Ende
irgendeines der Löcher) Du triffst auf ein leeres Loch -> keine
Kollision. Beim zweitem Mal triffst Du auf ein volles
Loch -> Kollision -> LinkedList.
Da du aber zwei Werte in eine leere Tabelle legen musst (s.o.) hast du
diese Kollision in der zweiten Ebene direkt bei der ersten Kollision in
der ersten Ebene.
Wenn Du nun eine andere Hashfunktion h(x)=z nimmst, dann hast Du
insgesammt weniger Kollisionen, das ist korrekt. Aber diese andere
Hashfunktion ist nicht _zwingend_ nötig für die Funktion.
Verwendet man keine zweite Hash-Funktion ist die Verwendung einer
Hash-Tabelle in der zweiten Ebene total sinnbefreit. Man verschwendet
damit Speicher und gewinnt keinerlei Performance, im Gegenteil.
再见,
CK
Microsoft: Where do you want to go today?
Linux: Where do you want to go tomorrow?
FreeBSD: Are you guys coming, or what?
http://wwwtech.de/