Schnelles suchen in einfach verketeter Liste

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Christian
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

Beitrag von Christian »

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 ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Tillman
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

Beitrag von Tillman »

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.

Christian
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:

Beitrag von Christian »

Das sortieren ist gar kein stress, mir gehts wie geschrieben ums suchen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
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:

Beitrag von af0815 »

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).

Christian
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:

Beitrag von Christian »

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...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Hast du diese Varianten schon mal durchgeschaut?
http://de.wikipedia.org/wiki/Suchverfahren

Tillman
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

Beitrag von Tillman »

@theo
ich vermute, bis Christian das alles gelesen und passende Algorithmen probiert und verworfen hat, ist er vom Thema ab.

@Christian
Kannst du dein Problem abstrahieren.
Ich bin immer noch der Meinung, dass Du mit dem Sortieren das Suchen gleich verbinden kannst.
Nenn doch mal ein Beispiel.

Christian
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:

Beitrag von Christian »

@theo, blindheit danke. die binary search dürfte für den anfang schon ganz gut sein.

@tillmann nein wüsste nicht warum man das verbinden sollte ?! dann muss ich zwangsweise jedesmal sortieren wenn ich was suchen will oder was ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
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)

Beitrag von pluto »

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 ?
MFG
Michael Springwald

Christian
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:

Beitrag von Christian »

Ich hab aber von anfang an ausgeschlossen das ich nen Index will pluto.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
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)

Beitrag von pluto »

Ja schon klar. Willst du bei null anfangen oder wie ?
jedes mal.
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

@Christian: Bist du eigentlich sicher, dass du mit der verketteten Liste auf das richtige Pferd setzt? Wenn es dir hauptsächlich ums Suchen geht, dann wäre wohl ein binärer Suchbaum besser. Oder vielleicht auch ein Array?
Man kann deiner Frage halt nicht wirklich entnehmen was dein Ziel ist.

Christian
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:

Beitrag von Christian »

@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 ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
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)

Beitrag von pluto »

warum verwendest du dafür nicht eine "Daten Bank" ?
da ist sowas schon dabei. Weil sich das so anhört das es sich um viele Daten Handelt.
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

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

Antworten