Christoph Zurnieden: Binaere Suche

Beitrag lesen

Hi,

Wenn es so kurz ist wie Deines: bleib einfach bei der Regexsuche, ist das bequemste.

dumme frage! was ist, wenn die datei gross wird (gross/klein)

Solche Spielereien mit Javascript eignen sich nicht wirklich fuer groessere Sachen, sowas sollte man schon nach Moeglichkeit auf den Server auslagern, ab einer gewissen Groesse sogar eine ausgewachsene DB in Betracht ziehen.

Aber es geht natuerlich auch mit Javascript. Ich hatte das in meinem Aufsatz mit Iframes geloest, aber da Frames als "deprecated" (missbilligt, abgelehnt) gelten waere die Ausfuehrung ueber DOM vorzuziehen. Ist auch technisch einfacher und viel eleganter.
Die lange Liste wird einfach in mundgerechte Stuecke geteilt, z.B. ganz willkuerlich alphabetisch. Jedes Stueck muss allerdings ein vollstaendig definiertes Javascript-Array sein. Aus der Datei 'liste.js'

  
var foobar = new Array("aa","ae","ba","be","ca","ce");  

Werden so die Dateien listea.js

  
var foobar = new Array("aa","ae");  

listeb.js:

  
var foobar = new Array("ba","be");  

und listec.js:

  
var foobar = new Array("ca","ce");  

Fuer die Suche nimmst Du dann den ersten Buchstaben des Suchwortes, bastelst daraus den Dateinamen und aenderst den Pfad im Scripttag per DOM.
Es koennte sein, das es die Datei nicht gibt, Du in meinem Beispiel 'listed.js' aufrufen moechtest. Am einfachsten ist es daher eine Liste der vorhandenen Dateien zu fuehren (hier reichen auch die Buchstaben) und dagegen zu pruefen.
Ist die Liste recht lang (New Yorker Telephonbuch) koennen auch mehrere Buchstaben genommen werden. Ist die Dateiliste auch zu lang kann diese auf dem gleichem Weg behandelt werden.

Grundsaetzliches Probem dabei ist natuerlich, das eine Regexsuche zwar funktioniert, sie jedoch _jede_ Datei laden muss und durchsuchen. Sinnvoll ist daher nur eine binaere Suche ueber sortierte Daten. (eine tatsaechlich funktionierende Methode waere z.B. ein Suffixtree der gesamten Liste, aber das waere dann in Javascript wirklich ein klein wenig beklopft ;-)

so short

Christoph Zurnieden