AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Suchalgorithmus gesucht

Ein Thema von Daniel · begonnen am 9. Okt 2007 · letzter Beitrag vom 10. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#1

Suchalgorithmus gesucht

  Alt 9. Okt 2007, 10:06
Moin z'ammen,

ich suche eine Suche ...

Es geht darum, dass ich einen Haufen an einzelnen, relativ kurzen (i.d.R. weniger als 40 Zeichen), Strings habe, die ich durchsuchen möchte. Wichtig an der Sache ist, dass ich auch nach beliebigen Teilstrings suchen muss - mein erster Ansatz mit Binärbäumen z.B. hat mir hier wenig geholfen.

Aktuell bin ich bei knapp 30.00 Einträgen und komme noch mit eiener FOR-Schleife und der Pos-Funktion aus dem FastCode-Project zurecht. Es ist aber absehbar, dass dieser Ansatz auf Dauer nur bedingt tauglich sein wird.


Hat einer von Euch mal ein Stichwort, nach welchen Verfahren ich da suchen könnte?
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Suchalgorithmus gesucht

  Alt 9. Okt 2007, 10:13
(Java) Lucene + JNI (Java Native Interface).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#3

Re: Suchalgorithmus gesucht

  Alt 9. Okt 2007, 10:15
Wäre da nicht ein Directed Acyclic Word Graph (DAWG) etwas? Das hat Hagen neulich irgendwo gepostet. Ich bin nicht sicher, ob das wirklich genau dein Problem löst, aber einen Blick wäre es vielleicht wert.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#4

Re: Suchalgorithmus gesucht

  Alt 9. Okt 2007, 10:22
Ggf. eine Hashtable.

Beim Eingeben eines Strings zerlegst Du diesen in alle möglichen Teilstrings.
Gibt es diesen Teilstring schon in der Hashtable, dann fügst Du dort eine Referenz auf den neuen String hinzu.
Gibt es diesen Teilstring noch nicht, berechnest Du darüber den Hash und fügst ihn mit der Referenz auf den neuen String in die Table ein.

Bei einer Suche berechnest Du über die Eingabe den Hash, und suchst in der Hashtable nach diesem Eintrag (Eine einzige For-Schleife über die Table).

Hast Du genau diesen Hash in der Tabelle gefunden sind alle mit diesem Eintrag referenzierten Strings das Suchergebnis, existiert der Hash nicht in der Tabelle hast Du auch keine Strings in der Datenquelle, die zu dieser Suche passen.

Das ist natürlich beim Einfügen eines neuen Datensatzes ein etwas höherer Aufwand, dafür ist die Suche schnell (nur Vergleich auf Gleichheit).

Zur Optimierung kann man dann die Hashtable in einen binären Baum packen, damit man nicht durch die gesamte Tabelle laufen muss sondern hier gezielt einen Hashwert herausfischen kann.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Suchalgorithmus gesucht

  Alt 9. Okt 2007, 11:18
Danke erstmal für Eure Hinweise.

Die DAWG werde ich zu einem späteren Zeitpunkt mal versuchen - rein aus Interesse.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
HERMES

Registriert seit: 29. Nov 2004
142 Beiträge
 
#6

Re: Suchalgorithmus gesucht

  Alt 9. Okt 2007, 11:31
Du kannst die einzelnen Strings mit Boyer Moore oder KMP durchsuchen, das sind recht effiziente Matching Algorithmen.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#7

Re: Suchalgorithmus gesucht

  Alt 9. Okt 2007, 12:04
Moin, moin,
ich hätte mal zwei Links auf die DP: Teil)String in anderem String suchen/zählen
und wenn man das noch kombiniert mit einer Directory-List (im Beispiel)
Vergleich von Suchverfahren mit Beispielen , dann sollte da was auf der Überholspur herauskommen.

Grüße in den Norden // Martin
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Suchalgorithmus gesucht

  Alt 9. Okt 2007, 12:05
Hallo Daniel,

interessieren Dich nur EXISTIERENDE TEXTTEILE ohne insgesamt ähnliche Einträge zu Deinen Suchwörtern (incl. evtl. Schreibfehler oder Abkürzungen)?

Stahli
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Suchalgorithmus gesucht

  Alt 9. Okt 2007, 12:06
Wenn, dann aber bitte Boyer-Moore. KMP ist in aller Regel nicht schneller als der naive Ansatz.

Was spricht denn gegen das normale Pos? Wieviele Strings werden das denn am Ende sein? Ich habe ein ähnliches Problem in einem anderen Programm, und da arbeite ich mit ca. 50.000 Objekten mit je 5 Strings (4 davon mit ähnlicher Länge, der fünfte kann auch was länger sein), und ein Durchsuchen dieser 250.000 Strings nach einem Suchbegriff dauert nur ein oder zwei Sekunden, vielleicht auch mal drei.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Suchalgorithmus gesucht

  Alt 9. Okt 2007, 12:12
@Stahli: Ja, es geht nur um existierende Textteile. Ähnlichkeit wäre knuffig, würde aber den Rahmen des Projektes sprengen.

@Gausi: Noch spricht nichts gegen den Einsatz der Pos-Funktion. Aktuell realisiere ich damit eine Filterung der Daten in (gefühlter) Realzeit. Sprich: Sobald der Anwender mit dem Tippen fertig ist, sieht er eine Liste, die seiner Auswahl entspricht. Ich werde vermutlich heute Abend mal eine signifikant größere Datenmenge haben. Die daraus resultierenden Suchzeiten werden bestimmen, wieviel Aufwand ich in die Optimierung der Suche stecken muss.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 Uhr.
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