AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Wertevergleich zweier Listen dauert sehr lange
Thema durchsuchen
Ansicht
Themen-Optionen

Wertevergleich zweier Listen dauert sehr lange

Ein Thema von SyntaxXx · begonnen am 1. Apr 2015 · letzter Beitrag vom 1. Apr 2015
Antwort Antwort
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#1

Wertevergleich zweier Listen dauert sehr lange

  Alt 1. Apr 2015, 13:37
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.008 Beiträge
 
Delphi 12 Athens
 
#2

AW: Wertevergleich zweier Listen dauert sehr lange

  Alt 1. Apr 2015, 13:42
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
flipdascript

Registriert seit: 20. Mai 2008
25 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Wertevergleich zweier Listen dauert sehr lange

  Alt 1. Apr 2015, 13:48
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.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Wertevergleich zweier Listen dauert sehr lange

  Alt 1. Apr 2015, 16:17
...und zweitens ist das Lookup im Dictionary potentiell schneller.
Es heißt 'exponentiell' und nicht 'potentiell'
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#5

AW: Wertevergleich zweier Listen dauert sehr lange

  Alt 1. Apr 2015, 16:48
Es heißt 'exponentiell' und nicht 'potentiell'
Das ist definitiv falsch

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

Geändert von BUG ( 1. Apr 2015 um 22:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Wertevergleich zweier Listen dauert sehr lange

  Alt 1. Apr 2015, 21:28
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  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 11:41 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