Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Wertevergleich zweier Listen dauert sehr lange (https://www.delphipraxis.net/184523-wertevergleich-zweier-listen-dauert-sehr-lange.html)

SyntaxXx 1. Apr 2015 13:37

Wertevergleich zweier Listen dauert sehr lange
 
Hallo zusammen,
ich habe folgendes Problem.

Ich habe 2 Textdateien, ca. 7 Mb groß.
Nun muss ich Werte von Textdatei 2 mit Werten aus Textdatei 1 vergleichen.

Dazu habe ich zur Zeit 2 For-Schleifen.

Inhalt Datei 1:
IchBinEinWert1:IchBinAuchEinWert1
IchBinEinWert2:IchBinAuchEinWert2
...

Inhalt Datei 2:
IchBinAuchEinWert1:IchBinEinWert3
IchBinAuchEinWert2:IchBinEinWert4
...

Nun soll aus Datei 1 "IchBinAuchEinWert1" in Datei 2 gesucht werden und mir dann "IchBinEinWert3" zurückgegeben werden.
Das mache ich zur Zeit mit zwei For-Schleifen.

Doch so wird für jeden Wert aus Datei 1 die komplette Datei 2 durchsucht.
Wenn der Eintrag gefunden wurde, stoppt dieser Durchlauf (zur Optimierung).
Trotzdem dauert das sehr sehr lange bei 7Mb Dateien.

Könnt ihr mir sagen, wie ich den Vorgang beschleunigen kann?
Ich werde sonst noch Threads einbauen.

Uwe Raabe 1. Apr 2015 13:42

AW: Wertevergleich zweier Listen dauert sehr lange
 
Lade doch beide Dateien in ein TDictionary<string,string>. Erstens ist dann immer alles im Hauptspeicher (die paar MB) und zweitens ist das Lookup im Dictionary potentiell schneller.

flipdascript 1. Apr 2015 13:48

AW: Wertevergleich zweier Listen dauert sehr lange
 
Ich würde die beiden Dateien jeweils in ein Dictionary lesen. Der Wert vor dem Doppelpunkt wäre dann mein Key und der Wert nach dem Doppelpunkt die Value. Danach müßte ich nur noch die KeyList des ersten Dictionaries durchlaufen und mit den Keys die Werte aus dem zweiten Dictionary auslesen.
Somit müssen die Werte jeder Datei nur noch einmal durchlaufen werden. Nachteil ist dass die Reihenfolge verlorengeht. Das könnte man aber auch lösen indem man zusätzlich noch eine Liste der Keys in ihrer Originalreihenfolge anlegt.

Dejan Vu 1. Apr 2015 16:17

AW: Wertevergleich zweier Listen dauert sehr lange
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1295800)
...und zweitens ist das Lookup im Dictionary potentiell schneller.

Es heißt 'exponentiell' und nicht 'potentiell' ;-)

BUG 1. Apr 2015 16:48

AW: Wertevergleich zweier Listen dauert sehr lange
 
Zitat:

Zitat von Dejan Vu (Beitrag 1295831)
Es heißt 'exponentiell' und nicht 'potentiell' ;-)

Das ist definitiv falsch :warn:

Man könnte vielleicht noch von einem quadratischen Speedup sprechen, wenn die beiden Dateien immer ungefähr gleich groß sind.
Präzise Begriffe für präzises Denken :stupid:

p80286 1. Apr 2015 21:28

AW: Wertevergleich zweier Listen dauert sehr lange
 
Falls Du alles "von Hand" machen willst:
sortiere Liste2 und suche die Werte von Liste1 mit der Binären Suche in Liste2.

Das sollte akzeptabel schnell sein.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 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