Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

idontknow

unregistriert

1

18.07.2012, 14:37

Hashing und Lineare Sondierung

Morgen!

Hab ein kleines Problem bei lernen auf die Klausur zum Thema Hashing bzw. lineare Sondierung.
Lineare Sondierung ist ja relativ einfach im Prinzip: Ich habe ein Feld und lass mir einen Hashwert zu ner Zahl generieren, wenn das Feld mit dem Index von dem Hashwert aber bereits voll ist gehe ich einfach ein Feld weiter, solange bis ich ein freies Finde wo ich meine Zahl ablegen kann.
D.h. ich habe eine hashfunktion der Form h(x, k) wobei k mein Sondierungswert ist den ich solange inkrementiere bis die Hashtabelle am Index h(x,k) nen freien Slot hat.

Was mir dabei überhaupt nicht ins Hirn rein will: Was soll der Spaß? Normalerweise benutze ich Hashing immer so, dass ich einen Schlüssel habe und dann später durch eingeben von dem Schlüssel wieder mein gespeichertes X finde, aber das funktioniert ja hier überhaupt nicht vor allem wenn ich anfange ein bisschen rumzulöschen kommt da doch totaler Schwachsinn raus in der Hashtabelle..

Beispiel: h(x,0) gibt mir den Index i. Jetzt speichere ich z.b. 2 weiter Zahlen die werden abgelegt am Index i+1 und i+2. Wie finde ich jetzt mit einem Schlüssel meine 2. Zahl? Denn h(x,k) gibt mir ja den Index i, aber für k = 0..2 habe ich einen gültigen Wert im Feld und einer davon ist meine Zahl die ich suche, aber wissen tu ich da gar nichts.

Also was soll das Zeug? Irgendwie kapier ichs nicht kommt mir mehr vor wie ein eigenartiges total praxisfernes Konstrukt das absolut keine Verwendung hat und das natürlich berechtigterweise..

Gruß
ftb

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

18.07.2012, 14:48

Das ist nicht praxisfremd. Das wird schon benutzt. Allerdings eher ein anderes Sondierungsverfahren (Quadratisches z.B.). Löschen ist natürlich ein Problem, aber da wird dann z.B ein Flag gesetzt, dass der Slot bereits mal benutzt wurde.
Wenn man jetzt einen Schlüssel sucht, dann wendet man die Hashfunktion an und gelangt an einen Ort. Dort schaut man ob der Schlüssel gleich dem gespeichertem ist, wenn ja hat man den Wert gefunden und wenn nicht sucht man anhand der Sondierungsfolge weiter bis man den Wert gefunden hat (oder einen leeren Slot gelangt).
Man wendet also den gleichen Algorithmus wie beim einfügen an um zu suchen. Gelöschte Slots müssen dann übergangen und weitergesucht werden.

idontknow

unregistriert

3

18.07.2012, 15:04

Ich finds halt eigenartig, denn diese Hashtabellen können ja nichts anderes machen außer einen Wert X einfügen in die Tabelle und kucken ob der Wert X in der Tabelle steht, deswegen entschließt sich mir der Nutzen von dem ganzen ein bisschen.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

4

18.07.2012, 15:07

Nicht einen Wert X, sondern einen Schlüssel X. Das ist ein Unterschied.

idontknow

unregistriert

5

18.07.2012, 15:12

Waa merk gerade hab das mit Schlüssel/Wert bisschen zusammengemixt deswegen hat der Soaß so wenig Sinn ergeben :P.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

18.07.2012, 15:18

Ungeachtet dessen sind Hash-Tabellen oder Hash-Sets äußerst praxisrelevant.
Sie bieten dir unter guten Voraussetzungen O(1)-Komplexität für alle wichtigen Operationen. Also quasi wie ein Array, aber mit dem wichtigen Unterschied, dass du nicht nur Integer als Schlüssel benutzen kannst, die Schlüsselwerte beliebig verteilt sein können und du vorher nicht wissen musst, was der Wertebereich der verwendeten Schlüssel ist.

Werbeanzeige