AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TObjectlst - Index eines Objektes finden

Ein Thema von scrat1979 · begonnen am 14. Feb 2010 · letzter Beitrag vom 17. Feb 2010
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

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

Re: TObjectlst - Index eines Objektes finden

  Alt 16. Feb 2010, 20:55
Zitat:
Function TIntegerDictionary.FindHash(aKey: Cardinal; Out h: Cardinal): Pointer;
Delphi-Quellcode:
Begin
  h := HashFromInt(aKey) Mod fHashMod;
  Result := fHashList[h];
  While PIntHashEntry(Result) <> Nil Do
    With PIntHashEntry(Result)^ Do
      If heKey = aKey Then
        Exit
      Else
        Result := heNext;
End;
Da wird also ein Hash von dem Integer gemacht und dann wird einie Liste durchsucht.

Wenn man den Integer nun direkt sucht, dann könnte man sich das Haschen sparen und müßte ebenfalls eine Liste durchgehn.

OK, hier würde man dann im schlimmsten Fall die komplette Liste durchgehn und bei der Map nur einen Teil.
Bei einer sortierten Liste würde man aber auch nur einen Teil der Liste durchgehn müssen.
(bei 1000 Einträgen in 'ner sortierten Liste wären auch nur maximal 10 Vergleiche nötig ... was etwa 'ner Hashmap mit fHashMod=100 entsprechen würde)

Oder seh ich das falsch?

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#12

Re: TObjectlst - Index eines Objektes finden

  Alt 16. Feb 2010, 23:37
Das mit O(1) darfst du alzaimar ruhig glauben .
Fakt ist: Eine Hashmap benötigt O(n) zum Aufbau und O(1) zum Lookup, dagegen kann eine sortierte Liste mit O(n log n) und O(log n) nicht anstinken.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: TObjectlst - Index eines Objektes finden

  Alt 17. Feb 2010, 07:02
Tut mir Leid, aber da ist eine Schleife drin, also kann das O(1) nicht stimmen.

Gut, die Speicherzugriffe zwischen dem Record (Value=Recordpointer-Offset) und Array+Property (Array-Referenz+Property-Zugriff) mag schneller sein, also würde es im idealfall eher so aussehn

Θarray(n) = Θmap(n / fHashMod) / x
> x wäre jetzt der Unterschied zwischen den beiden Zugriffen

Wenn jetzt fHashList[h] direkt den EINEN gesuchten Wert liefern würde, dann täte vielleicht Θ(1) rauskommen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#14

Re: TObjectlst - Index eines Objektes finden

  Alt 17. Feb 2010, 15:50
Zitat von himitsu:
Tut mir Leid, aber da ist eine Schleife drin, also kann das O(1) nicht stimmen.
Im Worst Case, ja, aber im Durchschnitt interessiert dann doch eher der durchschnittliche Fall . Und da gilt die angegebene Formel, die in der Quellenangabe auch hergeleitet wird (so viel Wahrscheinlichkeitsrechnung, argh ).

Zitat von himitsu:
Θarray(n) = Θmap(n / fHashMod) / x
Wenn du Vorfaktoren vergleichen willst, ist asymptotische Laufzeit definitiv das falsche Werkzeug .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 11:57 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