Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi Binäre Suche (https://www.delphipraxis.net/114956-binaere-suche.html)

Luckie 8. Jul 2008 08:21

Re: Binäre Suche
 
Na das sieht doch schon ganz gut aus. :P

alzaimar 8. Jul 2008 08:35

Re: Binäre Suche
 
... sooo, nun eine kleine Kritik.
  • Das Quicksort-Verfahren kann dahingehend optimiert werden, das nur ein rekursiver Aufruf erfolgt. Vorlage wäre die Quicksort-Routine von TStringlist. Ich meine, das die schneller/besser ist. :gruebel:
  • Das Suchen mit vorherigem Sortieren ist Quark, denn das dauert länger (O(n log n) als eine Suche in einer unsortierten Liste (O(n)). Da der Anwender genau weiss, ob seine Liste sortiert ist, oder nicht, kann/muss er sie eben gleich selbst sortieren (lassen)
  • Die hier angestrengen Überlegungen für eine allgemeine Listenklasse sind insofern kontraproduktiv, als das die daraus resultierende Klasse sehr behäbig seinen Dienst verrichten würde, da die für die Sortierung elementaren Operationen ('Swap') ausgelagert werden.

:cheer: Ex-CodeGear! Her mit den Generics! Aber zack! Zack! :cheer:

gammatester 8. Jul 2008 08:38

Re: Binäre Suche
 
Zitat:

Zitat von alzaimar

Delphi-Quellcode:
function Search(const aItem: TElement; AArray: TElementArray; var aIndex: Integer): Boolean;
var
  L, R, M: integer; // Für Left, Right, Middle

begin
  L := Low(aItem);
  R := High(aItem);
...
end;

Sollte das nicht besser heißen
Delphi-Quellcode:
 
L := Low(AArray);
R := High(AArray);
Gruß Gammatester

alzaimar 8. Jul 2008 08:51

Re: Binäre Suche
 
Och.. äh... Spießer.. :thumb:

p80286 8. Jul 2008 15:10

Re: Binäre Suche
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo sx2008,

ich hab mir Deine Demo einmal angeschaut, und bin bei der Stringsuche irgenwie in der Botanik gelandet.
Ich hab dann ein wenig angepasst und jetzt läufts.

Gruß K-H

gammatester 8. Jul 2008 15:33

Re: Binäre Suche
 
Zitat:

Zitat von p80286
Hallo sx2008,

ich hab mir Deine Demo einmal angeschaut, und bin bei der Stringsuche irgenwie in der Botanik gelandet.
Ich hab dann ein wenig angepasst und jetzt läufts.

Gruß K-H

Ich denke, daß zumindest Deine Quciksort-Routine unter einem bekannten Problem leidet:
Delphi-Quellcode:
procedure TBSearch.QuickSort(L, R: Integer);
var
  I, J, P: Integer;
begin
  repeat
    I := L;
    J := R;
    P := (L + R) shr 1;
    repeat
      while Compare(I, P) < 0 do
        Inc(I);
      while Compare(J, P) > 0 do
        Dec(J);
      if (I <= J) then
      begin
        Exchange(I, J);
        Inc(I);
        Dec(J);
      end;
    until (I > J);
    if (L < J) then
      QuickSort(L, J);
    L := I;
  until (I >= R);
end;
Beim Tauschen wird der Pivotindex nicht angepaßt, vgl http://www.delphipraxis.net/internal...ighlight=pivot

Nach Exchange sollte also eingefügt werden

Delphi-Quellcode:
{P muss weiter auf Pivot zeigen} 
if I=P then P:=J                
else if J=P then P:=I;
Luckies Routine hat das Problem nicht, da direkt mit einem Array gearbeitet wird.

Gruß Gammatester


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 Uhr.
Seite 2 von 2     12   

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