Warum verwendet man offenes Hashing?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

(Ich nehme hier an, dass "Geschlossenes Hashing" schlicht nur "Nicht-offenes Hashing" meint, wenn ihr eine andere Definition habt, dann könnte die Antwort anders lauten.)

Geschlossenes Hashing ermöglicht es, schnell den passenden Platz für ein Element zu finden, da die Adresse feststeht.
Man muss aber Möglichkeiten finden, mit Kollisionen umzugehen. Das sürfte dadurch geschehen, dass am entsprechendem Platz eine Datenstruktur liegt, die die Elemente dort verwaltet.

So, das Problem ist nun, dass eine solche Datenstruktur selbst auf verschiedenste Weise ineffizient sein kann. Am effizientesten wäre es vielleicht, wenn man viele Elemente hat, eine Datenstruktur dort zu verwenden, die auch mit Hashes arbeitet.
Das lohnt sich aber nur bei vielen Einträgen in einem Platz, das sollte ja aber eher nicht vorkommen.

Also verwendet man lieber die bereits existierende Hash-Struktur nur mit neuem Hash. Das wäre dnan offenes Hashing.

Das offene Hashing hat aber das Problem, dass die Adressberechnung umständlicher werden kann, insbesondere, wenn die Datenstruktur sehr voll ist.

Welche Datenstruktur nun besser geeignet ist, hängt von mehreren Faktoren ab, nicht nur von der Zahl der Elemente. Und oftmals gibt es noch andere Möglichkeiten, mit Problemen umzugehen, beispielsweise Rehashing oder dergleichen.
Eine große Zahl an Elementen macht es aber natürlich wahrscheinlicher, dass einzelne Plätze komplett gefüllt werden und man das behandeln muss (ob da offenes Hashing besser ist, müsste man jeweils einzeln prüfen).

Ich weiß außerdem, dass wir bei geschlossenem Hashing bevorzugen, später keine oder wenige Elemente wieder löschen zu müssen. Warum ist der Aufwand bei offenem Hashing da geringer?

Wenn man es passend implementiert, sollten da keine großen Unterschiede bestehen.