Array-Vergleich bei AutoIT

ich danke für die zahlreichen posts, aber habe im moment nicht so viel zeit das alles zu implementieren und zu testen. Aber falls ich Zeit finde, weiss ich ja wo ich anfangen kann ;)

Kann mir vllt einer zu ner Laufzeit-Funktion von meinem geposteten Java-Code helfen?

Habe für folgende Größen (immer beide arrays/listen zusammen addiert) folgende Zeiten:
40000 (2*20000) Zeilen -> 24 sec
80000 -> 90 sec
160000 -> ca. 500 sec
224805 -> 1137 sec
370595 -> 2599 sec
615591 -> 6136 sec

Die Doppelten verfälschen das Ergebnis ja schon, aber so krass???
Ich bin eigentlich von einer quadratischen Funktion ausgegangen. Wie kann ich die Laufzeit-Funktion ermitteln?
 
System.currentTimeMillis() liefert Dir die aktuelle Zeit in Millisekunden (also long-Wert)

Das kannst Du also nach jeder Operation auslesen und die Differenz bildet die Laufzeit.
 
ja, ich habe die Laufzeit ja schon berechnet, aber ich brauche ne mathematische Funktion dazu.
 
Fireball89 schrieb:
...folgende Zeiten:
40000 (2*20000) Zeilen -> 24 sec
80000 -> 90 sec
160000 -> ca. 500 sec
224805 -> 1137 sec
370595 -> 2599 sec
615591 -> 6136 sec

Die Doppelten verfälschen das Ergebnis ja schon, aber so krass???
Ich bin eigentlich von einer quadratischen Funktion ausgegangen. Wie kann ich die Laufzeit-Funktion ermitteln?

Ist doch auch quadratisch. Sogar eigentlich leicht höher, da Array1 im Verlauf immer größer wird.

Zur Optimierung des ganzen würde ich empfehlen (wie auch schon vorgeschlagen) array1 vorher in ein HashSet zu kopieren und darauf deinen Algorithmus laufen lassen.
So dürfte das ganze auf eine lineare Operation reduziert werden, da ein Contains per Hash O(1) sein müsste.

LG Ben
 
@lalas: Wenn du dir mal meinen Code mehr oder weniger anschauen würdest, würdest du merken, dass es nichts anderes macht...
Außerdem setzt dein Pseudo-Code was voraus? Sortierung... und so richtig durchdacht hast du den Code nicht, sorry - oder das Problem.

Was ist bei folgenden zwei Dateien
Datei 1:
A
B
C
D

Datei 2:
D
C
B
A
 
Zuletzt bearbeitet:
Guten Morgen,

[EDIT]: Sorry 1668mib, hatte Deinen code etwas "schnell" angeguckt. Hast Recht, im Grunde macht Du genau das, auch mit dem vorherigen sortieren macht in dem Fall Sinn.


das ist mir schon klar, dass bei anderen Sortierung der Zeilen diese als Differenzen erkannt werden.

Es ging mir im Kern nur um darum, dass ich nicht ganz den Sinn sehe, eine Zeile in ein Array zu verpacken. Wenn man den ganzen String direkt vergleicht, dürfte das ggf. schneller gehen.

Das "Problem" mit der Reihenfolge der Zeilen ist insofern zu ignorieren, da der OP nur erwähnt hat (oder ich habe es übersehen) dass er generell Zeilen ausfiltern will, welche in der Vergleichsdatei bereits vorkommen.
Es steht nirgends das die Zeilen-Reihenfolge bei den Dateien vergleichbar sein soll/muss.

Folglich würde es reichen, Die 1.Zeile aus Datei1 mit jeder Zeile aus Datei2 zuvergleichen und bei Gleichheit eben nicht zu verarbeiten.

Ob die Geschwindigkeit bei diesem Verfahren schneller/langsamer ist als die Array-Variante kann ich nicht sagen.
Wenn ich Zeit (und Lust ;) ) finde, schreibe ich am Wochenende mal ein bash-script was mal die String-Variante nutzt.

Gruss,
Lalas
 
Zuletzt bearbeitet:
Naja da man eh sortieren muss führt der Weg an einem kompletten einlesen kaum umher...
und irgendwie scheinst du meinen Ansatz nach wie vor nicht wahrgenimmen zu haben, sonst würdest du merken dass er doch genau in die Richtung dessen geht, was du auch gesagt hast oO
 
Doch, doch...deswegen ja meine Editierung im post darüber ;)

Übrigens, was höltst Du von Excel dafür ?

Copy+paste der beiden Textdateien in eine Spalte, sortieren und dann "Remove duplicates"
 
hmm wäre evtl auch nicht verkehrt
wusste gar nicht dass Excel dafür ne funktio n hat
 
ja, also die laufzeitfunktion ist inzwischen eh egal, hab gerade Quicksort und eine binäre Suche integriert und habe zwei dateien mit je 1,5mio zeilen in 6 sekunden zusammengeführt :eek: .
Damit bin ich voll zufrieden und ich danke nochmal allen für ihre Hilfe.
 
Zurück
Oben