AGB  ·  Datenschutz  ·  Impressum  







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

TList = verkettete Liste ? [erledigt]

Ein Thema von Hansa · begonnen am 11. Aug 2005 · letzter Beitrag vom 11. Aug 2005
Antwort Antwort
Seite 2 von 3     12 3      
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#11

Re: TList = verkettete Liste ?

  Alt 11. Aug 2005, 13:13
Zitat von marabu:
...Die zeiger-basierte Implementierung von Listen war keine Tugend sondern eher aus der Not geboren...
Dann mache ich eben aus der Not eine Tugend. Und die Not kam übrigens vom 64 KB Datensegment, was viel zu klein war. Deshalb wurde der Heap benutzt. Wie hat Bill Gates gesagt ? "Ich kann mir nicht vorstellen, daß es einmal eine Anwendung gibt, die mehr als 640 KB Speicher braucht".

P.S.: alles Richtung Array scheidet aus.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: TList = verkettete Liste ?

  Alt 11. Aug 2005, 17:05
Zitat von Hansa:
Zitat von marabu:
...Die zeiger-basierte Implementierung von Listen war keine Tugend sondern eher aus der Not geboren...
Dann mache ich eben aus der Not eine Tugend. Und die Not kam übrigens vom 64 KB Datensegment, was viel zu klein war. Deshalb wurde der Heap benutzt. Wie hat Bill Gates gesagt ? "Ich kann mir nicht vorstellen, daß es einmal eine Anwendung gibt, die mehr als 640 KB Speicher braucht".

P.S.: alles Richtung Array scheidet aus.
Warum ? Was ist denn der konkrete Anwendungszweck?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von mael
mael

Registriert seit: 13. Jan 2005
391 Beiträge
 
Delphi XE3 Professional
 
#13

Re: TList = verkettete Liste ?

  Alt 11. Aug 2005, 17:32
Zitat von marabu:
Die fortgeschrittene Prozessortechnik hat uns flache Adressräume gebracht. Die zeiger-basierte Implementierung von Listen war keine Tugend sondern eher aus der Not geboren. Der Pferdefuß bei einer array-basierten Implementierung von Listen ist die dynamische Rekonfiguration, der wahlfreie Zugriff auf die einzelnen Listeneinträge macht das aber mehr als wett. Die Motivation für eine zeiger-basierte Implementierung kann heute nur noch aus extrem knappem Hauptspeicher bei rein sequentiellem Zugriff kommen.
"Echte" Listen haben gegenüber dynamischen Arrays den Vorteil, daß Einfüge-Operationen in konstanter Zeit geschehen, d.h. man nur next bzw. prev Pointer anpassen muß.
Bei dynamischen Arrays muß hingegen ein durchgehender Speicherblock "gefunden" und dann alles kopiert werden, was je nach Listengröße auch gar nicht machbar ist. Das wird zwar durch intelligente Memory-Manager und Alloziierung von größeren Blöcken gemindert, hat aber immer noch eine viel größere Laufzeit.

Was besser ist, dynamische Arrays oder "echte" Listen, hängt ganz vom Einsatzzweck ab und davon ob man viele Einfügeoperationen (besser Listen) oder viele Zugriffe hat (besser dynamische Arrays).

Implementierungen von echten Listen, Bäumen usw. gibt es bei http://www.yunqa.de/delphi/
Ich dachte die JCL hätte sowas auch, habe aber dort nichts gefunden.
HxD, schneller Hexeditor:
http://mh-nexus.de/hxd
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#14

Re: TList = verkettete Liste ?

  Alt 11. Aug 2005, 19:25
Wie bitte?

Zitat von mael:
"Echte" Listen haben gegenüber dynamischen Arrays den Vorteil, daß Einfüge-Operationen in konstanter Zeit geschehen, d.h. man nur next bzw. prev Pointer anpassen muß.
Das mag ja für die Nachfahren Stack oder Queue gelten, aber für "echte" Listen gibt Dr. Landau immer O(n) an.

Zitat von mael:
Bei dynamischen Arrays muß hingegen ein durchgehender Speicherblock "gefunden" und dann alles kopiert werden, was je nach Listengröße auch gar nicht machbar ist.
Da beschreibst du jetzt aber wirklich den Sonderfall.

Wenn das framework team von Delphi keine zeiger-basierten Stacks und Queues implementiert hat, dann deshalb, weil die wissen, dass die beiden Implementierungen (zeiger vs array) funktional gleichwertig sind - die trade-offs sind ja schon beschrieben worden. Wer kann, der trifft im Einzelfall eine qualifizierte Entscheidung, alle anderen benutzen die mitgelieferten Komponenten und fahren im Regelfall nicht schlecht damit.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#15

Re: TList = verkettete Liste ? [erledigt]

  Alt 11. Aug 2005, 19:52
Erledigt deshalb : erstens nützt es nichts lange rumzulamentieren wegen ca. 20-50 Zeilen. Die Listen (habe doppelt verkettete verwendet) sind total flexibel, komme was wolle. 8)

Allerdins eines noch :

Zitat von Hansa:
Desweiteren kommt es mir so vor, daß next usw. in TList gar nicht existiert.
Zitat von Robert_G:
Die Antwort ist echt gut. Seltsamerweise ist bei mir zumindest in der Hilfe nichts von next und prev zu sehen. Gibts das jetzt oder etwa wirklich nicht ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: TList = verkettete Liste ? [erledigt]

  Alt 11. Aug 2005, 19:55
Natürlich gibts das nicht, warum auch? In einem Array macht sowas keinen Sinn.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#17

Re: TList = verkettete Liste ? [erledigt]

  Alt 11. Aug 2005, 20:06
Dann soll Robert_G mal bessere Antworten geben. Bei : denkt man, etwas übersehen zu haben ! Direktzugriff auf das Ding brauche ich keinen, sondern nur die Nachbarknoten. Also ist TList sowieso unbrauchbar.
Gruß
Hansa
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#18

Re: TList = verkettete Liste ? [erledigt]

  Alt 11. Aug 2005, 20:08
Ach Hansa...
  Mit Zitat antworten Zitat
Benutzerbild von mael
mael

Registriert seit: 13. Jan 2005
391 Beiträge
 
Delphi XE3 Professional
 
#19

Re: TList = verkettete Liste ?

  Alt 11. Aug 2005, 23:30
Zitat von marabu:
Wie bitte?
Das mag ja für die Nachfahren Stack oder Queue gelten, aber für "echte" Listen gibt Dr. Landau immer O(n) an.
Mit echten Listen meine ich die (doppelt) verketteten Elemente. D.h. Einfügeoperation braucht
Delphi-Quellcode:
NewElement := New(Element);
Insert(AtElement, NewElement)
begin
  AtElement.Next.Prev := NewElement;
  AtElement.Next := NewElement;
end;
Das heißt, ich gebe keinen Index an, sondern das Element nachdem ich einfügen will. Daher habe ich O(1).
Wenn man mit Indexen arbeitet (wahlfreier Zugriff) sind Listen nicht geeignet, aber häufig geht man von Anfang zum Ende einer Liste per next-Pointer. Der Algorithmus darf natürlich nicht, wie in Delphi üblich, mit Indexen funktionieren, sondern mit Pointern, sonst ergibt sich O(i) weil man i Elementen folgen muß um an die i-te Stelle zu gelangen und dort die Pointer auf das neue Element zeigen zu lassen.
Zitat von marabu:
Zitat von mael:
Bei dynamischen Arrays muß hingegen ein durchgehender Speicherblock "gefunden" und dann alles kopiert werden, was je nach Listengröße auch gar nicht machbar ist.
Da beschreibst du jetzt aber wirklich den Sonderfall.
Keineswegs, Einfügeoperationen sind teuer, da ich nicht einfach einen Pointer verbiege, sondern das Array redimensionieren und daher manchmal verschieben muß, da an der aktuellen Adresse nicht immmer genug Platz ist.

Zitat von marabu:
Wenn das framework team von Delphi keine zeiger-basierten Stacks und Queues implementiert hat, dann deshalb, weil die wissen, dass die beiden Implementierungen (zeiger vs array) funktional gleichwertig sind - die trade-offs sind ja schon beschrieben worden. Wer kann, der trifft im Einzelfall eine qualifizierte Entscheidung, alle anderen benutzen die mitgelieferten Komponenten und fahren im Regelfall nicht schlecht damit.
Ich wollte eigentlich damit nur sagen, daß "echte" Listen eine Berechtigung haben.

@Hansa: wie sieht es mit dem Link aus?
HxD, schneller Hexeditor:
http://mh-nexus.de/hxd
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#20

Re: TList = verkettete Liste ? [erledigt]

  Alt 11. Aug 2005, 23:45
Das Kopieren von dyn. Arrays lässt sich durch Containerklassen (wie zum Beispiel Tist) minimieren, aber es bleibt trotzdem bestehen.
Ich muss mich jetzt mal als ein Fan von Liten outen. Es ist ungemein praktisch wenn ich einfach hinter Element X einen neuen Knoten einfügen kann, ohne dass sich für die anderen Knoten etwas ändert. Wenn man sowieso nur durch den Container iterieren will, ist das eine elegante, feine Lösung.
Es gibt auch modernere Ansätze wie die Skiplist. Ddurch kann man ehr schnell in so einem Container suchen, bzw. sortiert einfügen.

@mael
Schnieke Iterierung für Listen ist ab D2005 durch for in möglich.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 08:42 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