Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
12. Feb 2012
Mit einem konstanten Wert bevorteilst und benachteilst du bestimmte Algortihmen, welche gerade bei diesem Wert ihre meisten Verleiche und Verschiebeaktionen hätten.
Die Resultate sind also absolut nicht aussafähig, denn schließlich hat du damit ja 95,8333% aller Möglichkeiten ignoriert.
Die Variante vorher ein Array mit Testwerten zu erstellen, hatte ich ja schonmal vorgeschlagen, das würde...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
12. Feb 2012
joar, MOD gefällt mir auch nicht, aber 24 ist soein blöder Wert :cry:
Aber da du ja eh die Aufrufe rausrechnen wolltest, isses doch egal. :mrgreen:
Nur was hast du gegen regelmäßig?
Ob man nun das 24-stel mit dem ersten Wert uws. machen würde, oder die 24 Werte immer hintereinander oder alles unregelmäig durcheinander (könntest ja via Random jeweils einen Wert reisholen), aber so, daß...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
12. Feb 2012
const
Values: array of LongWord = (
$04030201, $03040201, $04020301, $02040301, $03020401, $02030401,
$04030102, $03040102, $04010302, $01040302, $03010402, $01030402,
$04020103, $02040103, $04010203, $01040203, $02010403, $01020403,
$03020104, $02030104, $03010204, $01030204, $02010304, $01020304);
Temp.Card := Vaules;
Die 64 Bit Befehle sollen wieder mitfesten...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
10. Feb 2012
Zum Testen ein Array of ByteArray nehmen, mit unsterschiedlichen und Kombinationen befüllen (alle Möglchen).
Und dann alle Testes immer auf die selben Daten loslassen.
dynamische Arrays kann man oftmals mit Copy (ohne) Längenangabe kopieren.
Wie sieht denn dein Testumfelt aktuell aus?
Entweder das Array mit Zufallszahlen befüllen (*1) oder einfach hintereinander unsotiert alle möglichen...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
9. Feb 2012
Bjoerk bezog sich jetzt nur auf den Algo (vermute ich mal).
Ob es nun 15 oder 16 Sekunden dauert, je nach Algo, ist nun kein großer Unterschied. Gegenüber den 60 ist Beides viel schneller.
Bei der restliche Zeit, für das Holen der Daten und für die sonstigen Verarbeitungen ... ob dazu im Verhältnis die paar Millisekunden auffallen, das spielt ja auch noch eine Rolle. :zwinker:
Zum Glück...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
7. Feb 2012
Das Einzige was falschgemacht wurde, ist die Art der Vergleiche.
Wie schon erwähnt, kannst du keine Äpfel mit Birnen vergleichen.
* entweder man vergleich den Algorithmus
* oder man vergleicht die Speicherverwaltung/Programmierung
Beides zusammen kann nichts werden.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
5. Feb 2012
Nur Versionen mit Schleifen werden im Prinzip nichts verbessern können, da bei den 4 Werten werden Schleifen mehr "bremsen", als man durch irgendeinen Algorithmus optimieren könnte.
Sind ja maximal 9, aber mit dem schlechteren Sortierungsalgo auch nur 6 Vergleiche, was man sowieso nur auf 4-5 minimieren könnte.
(1-2 gepsarte Vergleiche + eventuelles Tauschen sind kleiner als 1-2 Schleifen...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
4. Feb 2012
Dennoch das inline nicht vergessen.
Ohne Inline sollte es mit den externen IFs schneller sein, da dort ja nur wenn nötig in die Swap-Prozeduren gesprungen wird,
wärend so immer in die Swap-Prozeduren gesprungen werden muß.
Mit inline sollte es keinen Unterschied machen, also in Betug zur Laufzeit, aber der Code wird wenigstens noch kürzer. :thumb:
Sprünge sind halt nicht so optimial....
Forum: Algorithmen, Datenstrukturen und Klassendesign
by himitsu,
4. Feb 2012
Wenn es um jeden Befehl geht, warum ist dann der Rest so schlimm?
Was macht das Temp in der übergeordneten Prozedur?
So muß Delphi bei jedem Aufruf von SwapB eine Referenz auf den Stack von D4SortByteArray übergeben und muß auch den Wert von Temp über den Stack jagen.
Als lokale Variable hätte Delphi die Chance das Temp wegzuoptimieren und den Wert in den Registern zu belassen.
Warum ist...