Einzelnen Beitrag anzeigen

Nelphin

Registriert seit: 2. Feb 2009
Ort: Kaiserslautern
71 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Daten auf Einzigartigkeit überprüfen...

  Alt 13. Dez 2009, 22:55
Zitat von Khabarakh:
Zitat von Nelphin:
ein mittelgroßer datensatz hat 20 minuten gebraucht um von 122760 zeilen auf 20438 zeilen runtergekürzt zu werden...
Bei O(n²) kein Wunder . Um auf lineare Laufzeit zu kommen, musst du dein Indexarray durch eine Hashmap ersetzen: http://www.delphipraxis.net/internal...ct.php?t=53653
erstmal danke für die Antwort!

ich dachte schon ich hätte einen trick gefunden mein indexarray nach dem sorted dupignore kram mit dieser procedure nachträglich zu erstellen:

Delphi-Quellcode:
procedure TForm1.Button21Click(Sender: TObject);
var i,g:integer;
var tauscher:integer;
var start,dauer:Cardinal;
begin
start := GetTickCount();
slopt.Sorted:=false;
setlength(optvarrayindfirst,sl.count); //länge vom indexarray festlegen
for g := 0 to sl.Count - 1 do
 optvarrayindfirst[g]:=9999999; // sinnloses befüllen damit mich die 0en nicht verwirren... kann später entfallen.


for i := 0 to slopt.count -1 do begin
tauscher:=sl.indexof(slopt[i]); // prüfen wo der eintrag in der alten liste stand
  while tauscher<>-1 do begin

  optvarrayindfirst[sl.indexof(slopt[i])]:=i; //im listarray an die gefundene stelle die stelle der neuen liste geben
  sl[sl.indexof(slopt[i])]:= 'tausch tausch';// damit beim zweiten indexof nicht die selbe stelle gefunden wird
  tauscher:=sl.indexof(slopt[i]);// nächste stelle suchen
  end;
end;

     dauer := GetTickCount() - start;
       panel2.Caption:='Listindex nachziehn hat '+floattostr(dauer/1000)+' Sekunden gedauert';
  end;
aber das gleiche problem... funktioniert bei kleinen datenmengen gut, aber bei großen zu langsam.

also werde ich mir morgen das mit den hashlists mal anschaun *seufz* komplettes WE weg und nix hinbekommen...
  Mit Zitat antworten Zitat