![]() |
AW: Volltextsuche
Hab gerade eben mal einen Suchbaum geschrieben (allerdings in Java) und hinsichtlich der Geschwindigkeit mit der TWoerterbuch-Klasse von DeddyH verglichen. Hab das ganze mal mit dem deutschen Ubuntu-Wörterbuch getestet (über 300.000 Wörter) und beispielhaft nach dem Präfix "Katze" gesucht (53 Treffer!). Das ganze hab ich auf einem Netbook laufen lassen (Single-Core, 1,7 GHz). Die Lösung von DeddyH benötigt bei mir im Schnitt etwa 80 ms, meine Suchbaum-Implementierung 2-3 ms. Wenn es also nicht auf extreme Geschwindigkeit ankommt oder der Umfang des Wörterbuchs gering ist, dann ist die Lösung von DeddyH auf jeden Fall voll in Ordnung (vor allem, weil sie einfacher zu implementieren und zu verstehen ist) :thumb: Allerdings ließe sich durch eine etwas komplexere Implementierung als Suchbaum doch noch einiges an Geschwindigkeit rausholen ;)
Nur so als Info, denn das hier: Zitat:
|
AW: Volltextsuche
Ja sicher, meine Lösung ist ja auch mehr auf Verständlichkeit (obwohl das für den absoluten Anfänger wohl auch schon hard stuff ist) als auf Performance ausgelegt. Wenn Du magst, kannst Du ja trotzdem einmal Deine Variante posten, ich denke, daran bin nicht nur ich interessiert (wer weiß, ob man das nicht mal brauchen kann?) ;)
|
AW: Volltextsuche
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
lg |
AW: Volltextsuche
*Puh* das muss ich mir mal ganz in Ruhe anschauen, obwohl ich arg bezweifle, dass meine Java-Grundkenntnisse von 2004 da noch ausreichen.
|
AW: Volltextsuche
Hm, vielleicht kommentiere ich das Teil auch mal ordentlich, dann sollte es relativ einleuchtend sein ;)
|
AW: Volltextsuche
Ich hab das Teil afaik als
![]() Wir durften eine Art T9 damit basteln :mrgreen: |
AW: Volltextsuche
Delphi-Quellcode:
(hoffentlich hab ich das jetzt richtig zusammenbekommen)
uses DB, DBClient, MidasLib; // unit MidasLib, damit man diese blöde Midas.dll nicht mitgeben muß
type TWoerterbuch = class(TClientDataSet) constructor Create; procedure Add(const Word: string); function Filter(const SearchWord: string): Boolean; procedure Delete(const Word: string); procedure Clear; procedure GetList(Result: TStrings); //property FileName: string; // ist alles in TClientDataSet deklariert //procedure LoadFromFile(const FileName: string = ''); //procedure SaveToFile(const FileName: string = ''; Format: TDataPacketFormat = dfBinary); //procedure LoadFromStream(Stream: TStream); //procedure SaveToStream(Stream: TStream; Format: TDataPacketFormat = dfBinary); end; procedure TWoerterbuch.Add(const Word: string); begin Insert; try Self['Word'] := Word; Post; except Cancel; raise; end; end; procedure TWoerterbuch.Clear; begin EmptyDataSet; end; constructor TWoerterbuch.Create; begin CreateDataSet; FieldDefs.Add('Word', {$IF SizeOf(Char) = 2}ftWideString{$ELSE}ftString{$IFEND}, 30); AddIndex('WordIdx', 'Word', [ixUnique, ixCaseInsensitive]); IndexName := 'WordIdx'; end; procedure TWoerterbuch.Delete(const Word: string); begin if Locate('Word', Word, [loCaseInsensitive]) then inherited Delete; end; function TWoerterbuch.Filter(const SearchWord: string): Boolean; begin if SearchWord <> '' then begin Filtered := False; FilterOptions := [foCaseInsensitive, foNoPartialCompare]; Filter := '[Word] LIKE ''' + SearchWord + '%'''; Filtered := True; end else Filtered := False; Result := RecordCount > 0; end; procedure TWoerterbuch.GetList(Result: TStrings); begin Result.BeginUpdate; try First; while not Eof do begin Result.Add(Self['Word']); Next; end; finally Result.EndUpdate; end; end; Oder direkt an eine datenbank ran, aber dann ohne CreateDataSet (im Constructor) und ohne SaveToFile und LoadFromFile. Statt GetList kann man es auch direkt, über eine TDataSource, an einen DBGrid hängen. Oder man nimmt die TDataSource als Vorfahre und das TClientDataSet in die Klasse rein. |
AW: Volltextsuche
Also den Namen Trie kannte ich bisher nicht (finde ich ehrlich gesagt auch etwas "gewöhnungsbefürftig"), aber das Prinzip ist genau das Gleiche ;) Das Beispiel mit dem T9 klingt interessant, da mach ich mir mal Gedanken dazu ;)
|
AW: Volltextsuche
Zu #27: Jetzt noch eine Client-/Server-Datenbank mit MySQL auf einem Webserver mit Abfragen über HTTPS, und wir haben auch den letzten Anfänger vergrault. Geht es hier eigentlich um Hilfe oder darum, wie man sich selbst am Besten darstellt? *Koppschüttel*
|
AW: Volltextsuche
Ehrlich gesagt finde ich den "Informationsaustausch" voll in Ordnung. Es geht darum, mögliche Lösungswege aufzuzeigen - darum geht es ja schließlich in einem Forum. Der TE hat ziemlich schnell eine funktionierende und relativ leicht verständliche Lösung bekommen, also kann der schonmal glücklich sein. Der Rest braucht ihn ja nicht zu interessieren, aber für andere User ist das hier evtl. durchaus interessant.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz