Schnelles suchen in einfach verketeter Liste
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Schnelles suchen in einfach verketeter Liste
Ich hab da mal n kleines Problem für die alten Hasen.
Ich hab ne einfach verkettete Liste, die ich komplett durchgehn muss um ein Element zu finden.
Gibt es einen einfachen Weg, um das zu beschleunigen ?
Ich dachte daran die Liste zu sortieren und dann je nach irgendwo in de Mitte anzufangen zu suchen jedoch wird das immer alles so verdammt komplex. Ich lande immer wieder bei Bäumen. Gibt es da keine einfachere Möglichkeit ?
Ich hab ne einfach verkettete Liste, die ich komplett durchgehn muss um ein Element zu finden.
Gibt es einen einfachen Weg, um das zu beschleunigen ?
Ich dachte daran die Liste zu sortieren und dann je nach irgendwo in de Mitte anzufangen zu suchen jedoch wird das immer alles so verdammt komplex. Ich lande immer wieder bei Bäumen. Gibt es da keine einfachere Möglichkeit ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 6
- Registriert: Sa 4. Aug 2007, 18:42
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Schwedt/Oder
Hmm.. mir fällt da auf die Schnelle nur bubblesort ein.
Ich denke, englisch ist dir geläufig.
http://www.wiu.edu/users/mflll/cs214/bubble_sort.html
aber der Code ist wenigstens in "international" geschrieben
Komplex ist die Routine nicht, nur ganz laaaaaaannn..g ähn,
aber innerhalb des Algorithmus kannst du gleich nach deinem Element suchen.
Sortieren abbrechen wenn Element gefunden.
Ich denke, englisch ist dir geläufig.
http://www.wiu.edu/users/mflll/cs214/bubble_sort.html
aber der Code ist wenigstens in "international" geschrieben
Komplex ist die Routine nicht, nur ganz laaaaaaannn..g ähn,
aber innerhalb des Algorithmus kannst du gleich nach deinem Element suchen.
Sortieren abbrechen wenn Element gefunden.
- af0815
- Lazarusforum e. V.
- Beiträge: 6209
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Du wirst entweder um eine sortierte Liste nicht umhinkommen, der nächste Schritt ist die doppelt verkettet liste (von beiden Seiten aus zu durchsuchen. Oder die Bäume, die die Daten für die Suche optimiert halten. Genau dieses suchen war die Lösung für schnelle Suchabfolgen. Wenn die Daten komplexer sicd -> mehere Suchen -> dann musst du dir mit Indexbäumen helfen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Wie schon einleitend gesagt stellt das sortieren kein Problem dar. Hab ich mich so undeutlich ausgedrückt ?
Ich hab jetzt eine sortierte Liste meinetwegen auch eine doppelt verkettete das wäre auch kein Problem. Aber wie geh ich nun in meiner sorteierten Liste ans suchen heran ? Ich weiss ja ohne Index nicht wo welcher anfangswert steht ?!
genauer gefragt wie geh ich am besten vor um mit Sprüngen näherungsweise ans Ziel zu kommen...
Ich hab jetzt eine sortierte Liste meinetwegen auch eine doppelt verkettete das wäre auch kein Problem. Aber wie geh ich nun in meiner sorteierten Liste ans suchen heran ? Ich weiss ja ohne Index nicht wo welcher anfangswert steht ?!
genauer gefragt wie geh ich am besten vor um mit Sprüngen näherungsweise ans Ziel zu kommen...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Hast du diese Varianten schon mal durchgeschaut?
http://de.wikipedia.org/wiki/Suchverfahren
http://de.wikipedia.org/wiki/Suchverfahren
-
- Lazarusforum e. V.
- Beiträge: 7178
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Evlt. auch nur beim ersten Sortieren da suchst du auch gleich.
beim zweiten suchen könntest du jetzt einfach die Stelle berechnen wo der Index sein müsste. z.b. alle Einträge die G anfangen könntest du übersrpingen wenn du nach einem Eintrag suchst der mit H anfängt. Allerdings müsstest du hier die anzahl irgendwie abspeichern. wie viele fangen mit G an ?
beim zweiten suchen könntest du jetzt einfach die Stelle berechnen wo der Index sein müsste. z.b. alle Einträge die G anfangen könntest du übersrpingen wenn du nach einem Eintrag suchst der mit H anfängt. Allerdings müsstest du hier die anzahl irgendwie abspeichern. wie viele fangen mit G an ?
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
@Pluto, nein muss man nicht siehe Binäre Suche.
@Theo, ich hab eine Objektliste in der ich einen String hab nach dem ich suchen muss. Wenn ich die Struktur an sich jetzt übern Haufen werfe muss ich ne ganze menge Code neu schreiben. Wie meinst das mitm Array ?
@Theo, ich hab eine Objektliste in der ich einen String hab nach dem ich suchen muss. Wenn ich die Struktur an sich jetzt übern Haufen werfe muss ich ne ganze menge Code neu schreiben. Wie meinst das mitm Array ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Christian hat geschrieben:Wie meinst das mitm Array ?
Naja, ob der Binary Search mit verketteten Listen auch geht bin ich mir nicht ganz sicher.
Wie willst du denn auf ein beliebiges Element zugreifen, ohne die Liste durchzurattern?
Binary Search ist doch meist mit Arrays implementiert.
Kann mich auch irren....
Achtung: Binary Search <> Binary Tree