AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Extendible Hashing - Integer --> Binär
Thema durchsuchen
Ansicht
Themen-Optionen

Extendible Hashing - Integer --> Binär

Ein Thema von fkerber · begonnen am 28. Dez 2009 · letzter Beitrag vom 28. Dez 2009
Antwort Antwort
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#1

Extendible Hashing - Integer --> Binär

  Alt 28. Dez 2009, 15:39
Hi!

Da das Projekt an sich in Java geschrieben ist, erspare ich euch spezielle Codes und versuche das Problem etwas abstrakter zu beschreiben.
Also, es geht um die Implementierung von Extendible Hashing.
Ich glaube, es geht schneller wenn man kurz den Wiki-Artikel liest, als wenn ich mir einen Knoten in die Finger schreibe, um es zu erklären - allerdings ist auch für das eigentliche Problem nicht ganz so wichtig, wofür man es im Endeffekt braucht.
Wichtig ist im Prinzip folgendes: Man hat x Werte, die man da einfügen möchte (in meinem Fall sind es Integer-Werte) und damit man rausbekommt, in welches Bucket man sie einfügen muss, wird ihre Darstellung als Binärzahl gebraucht. (Allerdings immer nur die letzten Stellen). Und genau da liegt das Problem:
Es ist verdammt zeitaufwendig, diese Umwandlung von Dezimal nach Binär durchzuführen. Es gibt da in Java eine fertige Methode für, ich denke, die wird wohl schon das schneller sein, als wenn ich da jetzt was von Hand frickel.
Die Sache ist ja jetzt, dass man meist Sachen berechnet, die man nicht braucht. Als Beispiel mal folgendes:

Hash: 213.338.459 --> Binär: 1100 1011 0111 0100 1001 0101 1011

Davon brauche ich vllt. die letzten 4 oder 5 Stellen - also 11011 z.B.


Langer Rede kurzer Sinn:
Kennt jemand eine Möglichkeit, wie ich an diese Zahlen kommen könnte, ohne so viel Aufwand zu haben?
Insbesondere ist es wichtig, dass es die letzten Stellen der Binärdarstellung sein müssen, damit man schrittweise Stellen davor machen kann, wenn das Hashing es erfordert.

Ich denke, die Alternative, dass man die ersten Stellen nimmt und diese reversiert ist keine wirkliche, da das Reversieren ja auch kostet...


Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#2

Re: Extendible Hashing - Integer --> Binär

  Alt 28. Dez 2009, 15:45
in Delphi ... k.A. wie das in Java aussieht

i and 1 = letzte Stelle
(i shr 1) and 1 = vorletzte Stelle
i and 3 = letzten zwei Stellen

ich denke mal nicht, daß es nötig ist das auch noch in Strings umzuwandeln
(abgesehn davom, daß eine Suche im Baum mit Strings nicht grad optimal ablaufen dürfte)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: Extendible Hashing - Integer --> Binär

  Alt 28. Dez 2009, 15:53
Hi!

Das klingt interessant.
Geht es da auch irgendwie weiter?

Also wenn ich auf einen Schlag die letzten 5 Stellen brauche?


Edit:
Welche Suche im Baum meinst du?
Es gibt da keinen Baum und der Binärstring wird auch nochmal in einen int umgewandelt


Edit2:
Gefunden: i and 31 liefert die letzten 5 Stellen - System erkannt.

Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#4

Re: Extendible Hashing - Integer --> Binär

  Alt 28. Dez 2009, 16:04
Zitat von fkerber:
Welche Suche im Baum meinst du?

Es gibt da keinen Baum und der Binärstring wird auch nochmal in einen int umgewandelt
na den Baum?
Zitat:
and uses a trie for bucket lookup

Zitat von fkerber:
Das klingt interessant.
Geht es da auch irgendwie weiter?
Zitat von fkerber:
Edit2:
Gefunden: i and 31 liefert die letzten 5 Stellen - System erkannt.
genau
31 = binär ...00000000011111 und gibt per AND nur diese Stellen/Bits zurück
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#5

Re: Extendible Hashing - Integer --> Binär

  Alt 28. Dez 2009, 16:27
Hi!

Ah, ok.
Es gibt bei unserer Implementierung keinen Baum.
Wir haben ein Array, in dem die Buckets drin sind. Daher wurde auch der Binärstring wieder in nen int verwandelt, der dann als index für den Arrayzugriff diente.

Habe das jetzt umgebaut und einen deutlichen Speedup verzeichnen können.


Vielen Dank!


Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz