Benno Hartwig schrieb:
Wie ist das an solchen Stellen eigentlich realisiert?
Ich hatte geglaubt, es würde über den Hashwert in die Hashtabelle gegriffen, und dort wäre aber neben der Bewertung auch Information hinterlegt, die verlässlich dokumentiert, ob die Stellung passt. Es wäre ausgeschlossen, dass mit einem falschen Wert gearbeitet wird.
Ist dies nicht so? Wird einfach frech mit dem Wert gerechnet und wir tun so, als ob es Hashkollisionen gar nicht gäbe?
Gemeinhin widmet man sich, wenn man in anderen Zusammenhängen Hashtabellen nutzt, doch sehr eingehend der Behandlung von Hashkollisionen. Bei Engines nicht???
Man könnte die berechneten Stellungen und deren Bewertung auch ganz ohne Hash-Keys und Hash-Tabellen speichern, dann wäre die Gefahr für eine Kollision gleich Null. Das Problem dabei wäre, dass wesentlich mehr Speicherplatz benötigt werden würde und der Zugriff nicht ganz so schnell erfolgen könnte. Mit dem Hashen wird alles viel schneller und effizienter - um den Preis, dass gelegentlich Kollisionen auftreten können. Natürlich gibt es jede Menge Dinge, die gemacht werden, damit Kollisionen selten sind (Prüfsummen, Algorithmen für die Keys, etc.), aber ein Restrisiko bleibt immer.
Mein Schlüsselerlebnis hatte ich als Student, als bei einer Vorlesung gefragt wurde, was man programmiertechnisch genau tun müsse, um einen Fehler aufgrund einer Hashkollision abzufangen. Die Antwort des Professors war: "Was machen Sie, wenn ihr Rechner beim Hochfahren nicht funktioniert? Richtig, Sie starten ihn noch einmal und vergessen das Problem, wenn beim zweiten Mal alles in Ordnung ist. Hashkollisionen sind so selten, dass es sich nicht auszahlt, in so eine Problemstellung Zeit zu investieren."
Daraus folgt auch, dass man kritische und heikle Daten wie zum Beispiel Befunde im Gesundheitsbereich niemals hashen darf. Schachstellungen hingegen sind sehr gut dafür geeignet.