FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Hashing und Kollisionen

Hashing und Kollisionen 2005-03-13 15:33
Morpheus
Moin,

ich lern grad n bissi was für meine p2-p3 prüfung und bin da über ein was sehr verwirrendes gestoplpert. und zwar hat prof. neumann ne frage-antwort pdf als übung für die prüfung ins net gestellt. ich weiss jetzt nich mehr wo genau, aber zu hashing und kollisionen schreibt er:

geschlossenes hashing: behälter kann nur konstante zahl von schlüsseln aufnehmen, und bei kollision werden die daten in mehreren behältern umgelagert mit der hilfe einer neuen hashfunktion

offenes hashing: behälter kann beliebig viele schlüssel aufnehmen

nur hab ich jetzt folgendes bei wikipedia gefunden, was ja eigentlich recht zuverlässig ist…

Geschlossenes Hashing

Beim geschlossenem Hashing ist die Hash-Tabelle so strukturiert, dass jeder Behälter eine dynamische Datenstruktur aufnehmen kann - beispielsweise auf eine Liste oder einen Baum. Jeder Schlüssel wird dann in dieser Datenstruktur eingetragen oder gesucht. So ist es problemlos möglich, mehrere Schlüssel in einem Behälter abzulegen, was allerdings zu mehr oder weniger verlängerten Zugriffszeiten führt. Die Effizienz des Zugriffs wird dabei davon bestimmt, wie schnell Datensätze in die gewählte Datenstruktur eingefügt und darin wiedergefunden werden können.

Offenes Hashing

Beim offenen Hashing kann jedem Behälter nur eine feste Anzahl von Schlüsseln zugewiesen werden. Häufig wählt man einfach einen einzigen möglichen Schlüssel pro Behälter. Im Kollisionsfall muss dann nach einem alternativen Behälter gesucht werden. Dabei geht man so vor, dass man für m Behälter eine ganze Folge von m Hash-Funktionen definiert. Führt die Anwendung der ersten Hash-Funktion, nennen wir sie h0, zu einer Kollision, so wendet man h1 an. Führt diese ebenfalls zu einer Kollision (d.h. der entsprechende Behälter ist bereits belegt), so wendet man h2 an, und so weiter bis hm − 1. Das Verfahren arbeitet mit sogenannter offener Adressierung, da durch Kollisionen gleiche Schlüssel unterschiedliche Adressen zugewiesen bekommen können.

Welche version entspricht den der wahrheit, kann mich da ma jemand auklären? danke im vorraus

Re: Hashing und Kollisionen 2005-03-13 16:32
Slater
hmm lustig,

erst hab ich hier einen Text gefunden mit genau dem gleichen Wortlaut wie in deinem Wikipedia-Zitat nur eben andersrum
http://infos.aus-germanien.de/Hash-Funktion


ich dachte schon damit die Richtigkeit des frage-antwort-pdfs erwiesen zu haben, da dies auch meiner Vorstellung entspricht


dann aber fand ich
http://vsis-www.informatik.uni-hamburg.de/teaching/ws-02.03/p3/Folien/P3_02_Teil1_2.pdf

also P3-Folien, deren Inhalt wiederum dem Wikipedia-Ansatz entsprechen!!


das ist ja mal doppelt verwirrend,

vielleicht schaust du dir einfach 20 Seiten über google dazu an
und hoffst eine Mehrheit zu finden ;)

Re: Hashing und Kollisionen 2005-03-13 17:34
Morpheus
mmmh, ich glaub sogar ich erdreiste mich ma dem herr neumann mal ne mail zu schreiben… schliesslich lass ich mich auch bei ihm prüfen, soll mir dann egal sein was richtig iss, hauptsache ich sag das was er hören will ;)

danke trozdem sl8r

Re: Hashing und Kollisionen 2005-03-14 18:11
Anonymer User
sehr verwirrend !

Re: Hashing und Kollisionen 2005-03-14 20:30
georg
ich erdreiste mich ma dem herr neumann mal ne mail zu schreiben…

Ich habe auch schon von beiden Varianten gehört (in dem Buch, das
ich zum P Lernen aus der InfBib habe (Ottmann/Widmeyer, "Algorithmen
und Datenstrukturen"), wird z.B. die Variante beschrieben, offenes
Hashing bedeute, dass bei belegtem Bucket das Element in einen
anderen Bucket gespeichert wird, während der P3-ÜL was anderes
erzählt hat).

Daher würde mich die Antwort von Herrn Neumann auch interessieren
(habe auch bei ihm Prüfung)!

Re: Hashing und Kollisionen 2005-03-15 00:37
Anarch
Ihr habt da was gefunden, was sich "unterschiedliche Begriffsdefinition" nennt. Keine davon ist "richtig" oder "falsch". Da es anscheinend sowohl die eine als auch die andere Ansicht gibt, würde ich mich glatt erdreisten beide kennen zu wollen. Wenn man gefragt wird - in ner Prüfung oder sonstwo - kann man sagen "es gibt da sowohl die als auch die Definition". :-)

Re: Hashing und Kollisionen 2005-03-22 20:20
Morpheus
Zitat aus der mail die ich von Prof. Neumann bekomm hab
halten wir uns doch mal an an Güting, Datenstrukturen und Algorithmen:

Offenes Hashing:
a) Elemente werden bei Kollision in Form einer verketteten Liste an Bucket angehängt, Platz für zusätzliche Elemente unbeschränkt und von ausserhalb der Buckets.
b) Es wird ein freier Platz in der Hash-Tabelle durch Inkrementieren der Hash-Adresse gesucht, auch als "Sondieren" bezeichnet.

Geschlossenes Hashing: Bucket-Struktur weist feste Maximalzahl von Kollisionsplätzen auf, zB in Form eines Speicherblocks je Bucket. Wenn der voll ist, entsteht ein Überlauf, der zu einer Speicherung in einem Überlaufbereich zwingt.

Formulierungen im Skript werfen a) und b) beim offenen Hashing leider etwas durcheinander. Faustregel:
"Offen": das Verfahren ist von Anfang an auf (nahezu) beliebig viele Kollisionen eingestellt.
"Geschlossen": das Verfahren ist auf eine feste Zahl von Kollisionen eingestellt und hat Überlauf als Notmaßnahme.

Gruß, B. Neumann
/edit thx owen

Re: Hashing und Kollisionen 2005-03-22 20:22
UncleOwen
War das jetzt ein Zitat aus 'ner Mail? Dann kennzeichne das auch lieber als solches…