Forum: Algorithmen, Datenstrukturen und Klassendesign
by TiGü,
16. Mär 2022
Die Capacity der temporären Liste würde ich so wählen, dass ohne große Neuallokation von Speicher der Inhalt der zu überprüfenden Liste reinpasst.
Also NewCapacity := Round(1.5 * OldList.Count) so als Startwert, man kann sich rantasten.
Damit ist der Platz schonmal vor reserviert und es kann ja durchaus vorkommen, dass keine Doppelungen vorkommen.
Immer wenn not IsListItemEqual dann wahr...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by TiGü,
16. Mär 2022
Bei RemoveIdenticalFromList musst du anhand deiner Testdaten prüfen, wie oft es wirklich vorkommt, dass wirklich doppelte und aufeinanderfolgende Einträge existieren.
Durch das Delete wird TListHelper.InternalDoDeleteN aufgerufen und das sorgt durch den Move Befehl für teure Speicheroperationen.
Vielleicht wäre hier ein Ansatz mit temporärer Liste mit vor initialisierter Länge besser, in der...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by TiGü,
16. Mär 2022
Wenn ich mich jetzt nicht verguckt habe, kann man die Hauptfunktion auch etwas verkürzen zu:
function CompareBothLists(AFirstList,
ASecondList: TCadVec3List; ADirectional, AFirstListOpen, ASecondListOpen: Boolean): Boolean;
var
LFirstTmpList,LSecondTmpList: TCadVec3List;
function PleaseChangeToAMeaningfulName(const AList1, AList2: TCadVec3List; const ADirectional: Boolean):...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by TiGü,
16. Mär 2022
Ein paar Testdaten zum schnellen Ausprobieren wäre eine gute Idee, damit wir leicht die Fälle erkennen können, woran es genau scheitert.
Beim ersten drüber schauen lässt sich relativ leicht zum Beispiel das hier optimieren:
function IsListItemEqual(AFirstRecord, ASecondRecord: TCadVec3): Boolean;
begin
// Vergleich der Elemente in der Liste.
if (AFirstRecord.x = ASecondRecord.x) and...