AGB  ·  Datenschutz  ·  Impressum  







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

Performante sortierte LIste

Ein Thema von hanspeter · begonnen am 15. Okt 2010 · letzter Beitrag vom 19. Okt 2010
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Performante sortierte LIste

  Alt 16. Okt 2010, 11:54
Wie schnell muss die denn sein?

Im Anhang ein kleines Beispiel-Projekt mit so einer Ticket-Liste

btn1 füllt die Liste mit 5000 Einträgen und löscht dann wieder 2000 (Termine werden per Random angefordert)
btn2 trägt dann einen einzelnes Ticket ein (Dauer ca. 140 Ticks -> ca. 0.000040s)

Noch schneller?
Angehängte Dateien
Dateityp: zip TicketListe.zip (416,7 KB, 29x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Performante sortierte LIste

  Alt 17. Okt 2010, 09:07
Wie schnell muss die denn sein?

Im Anhang ein kleines Beispiel-Projekt mit so einer Ticket-Liste

btn1 füllt die Liste mit 5000 Einträgen und löscht dann wieder 2000 (Termine werden per Random angefordert)
btn2 trägt dann einen einzelnes Ticket ein (Dauer ca. 140 Ticks -> ca. 0.000040s)

Noch schneller?
Vielen Dank erst mal für das Beispiel.
Ich hatte gestern schon mal geantwortet.
Irgendwie werden aber Beiträge verschluckt.
Ich habe bei mir die Terminsuche auf eine binäre Suche umgestellt und damit auch eine erhebliche Leistungssteigerung erreicht.
Über ein TDictionary hatte ich auch schon nachgedacht. Hier ist dann allerdings die Behandlung von mehreren Tickets an einem
Tag etwas schwieriger. Da könnte man dann mit einer verketteten Liste arbeiten.
Also nochmal vielen Dank für die Mühe als Denkanstoss.

Peter
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Performante sortierte LIste

  Alt 17. Okt 2010, 09:17
Was mir aber noch nicht die Frage beantwortet, was jetzt "schnell" und was "langsam" ist
Wenn es einen noch scheeleren Ansatz gibt, wäre es ja lohnenswert diesen hier anzusprechen, bzw. es würde ja schon reichen die Performance von deinem Code zu haben. Dann haben wir alle was davon
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Performante sortierte LIste

  Alt 19. Okt 2010, 08:26
Was mir aber noch nicht die Frage beantwortet, was jetzt "schnell" und was "langsam" ist
Wenn es einen noch scheeleren Ansatz gibt, wäre es ja lohnenswert diesen hier anzusprechen, bzw. es würde ja schon reichen die Performance von deinem Code zu haben. Dann haben wir alle was davon
Ich habe eine zufällige Datumsliste von 10.000 Einträgen erzeugt.
Das gleiche Datum kann mehrfach auftreten.
Diese werden einzeln in einer Liste aufsteigend eingefügt.
Das TDictionary brachte keinen größeren Zeitgewinn, da Daten am gleichen Tag in einer Liste verkettet werden müssen.
Ich habe das nicht voll ausprogrammiert lag etwas über 180 ms.
Das verwenden eines TList , lineares Suchen des Eintrittspunktes und Einfügen benötigte 195 ms.
Das Verwalten als doppelt verkettete Liste benötigte 225 ms.

Überraschend war das Ergebnis des dritten Versuches.
Der Insertpunkt in einem TList wurde sequentiell gesucht, der Eintrittspunkt aber mit 4 Vergleichen eingeschränkt.

Delphi-Quellcode:
m1 := List.count shr 2;
m2 := m1 + m1;
m3 := m2 + m1;
Hier benötigte ich noch 72 ms.

Das ganze mit 100.000 Einträgen.

26:175 sec linear
8:960 sec mit Vergleich.

Ich bestimme die Anzahl der binären Schritte jetzt dynamisch, sodass 10 bis 20 sequentielle Suchschritte übrigbleiben.
Mit 100.000 Einträgen benötige ich dann etwa 3 sec.
Eine rein binäre Suche wäre wohl die schnellste Lösung. Ist jedoch schwierig, da Einträge mehrfach vorhanden sein können oder ganz fehlen.

Peter
  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 15:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz