Hast du bei dem Ansatz keine Bedenken? Immerhin können dann nur noch Wörter eingegeben werden, die in der Liste vorkommen. Das macht Sinn, wenn das Programm mit anderen Wörtern ohnehin nichts anfangen kann (Navi), in anderen Fällen aber nicht (vor allem in freien Texten). Macht das für dein Programm Sinn?
Ich denke, das geht noch effizienter als mit der Liste. Spontane Idee: Du baust einen Baum auf, so, dass jede Kante mit einem Buchstaben beschriftet ist. Dann entspricht jedes Blatt (bzw. auch nicht Blatt) dem Wort, das man bekommt, wenn man die Buchstaben auf dem Pfad zur Wurzel aneinander hängt (gelesen von Wurzel zu Blatt).
Den Baum musst du für eine Liste an Wörtern nur einmal aufbauen und kannst ihn dann speichern; er braucht nicht wesentlich mehr Speicherplatz als die Liste selber und vor allem: Du kannst in konstanter Zeit (bzw. Alphabetgröße) entscheiden, welche Buchstaben als nächstes noch eingegeben werden dürfen, denn dazu musst du nur die ausgehenden Kanten vom aktuellen Knoten traversieren. Wenn dann der nächste Buchstabe kommt, gehst du die Kante mit entsprechender Beschriftung entlang und setzt den neuen Knoten als aktuellen Knoten.
Edit:
Code:
Type on of: " # $ % & ' ( ) * - . 0 1 2 3 4 5 6 7 8 9 < > @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] a b c d e f g h i j k l m n o p q r s t u v w x y z } ~ Ä É Ö Ü ß à ä ö ü Œ Δ α β δ η μ π σ ‰ €
W
You typed: W
Type on of: - C D E G H K M R S T W a e h i l o r u ä ö ü
e
Type on of: a b c d e g h i l m n r s t y
l
Type on of: c l p s t
t
You typed: Welt
Type on of: a b c e f g h k l m o p r s t u v w
e
Type on of: n
n
Type on of: b d i l
b
Type on of: e r u
e
Type on of: r
r
Type on of: g
g
You typed: Weltenberg
No more words with this prefix; abort
Braucht einmal am Anfang, bis der Suchbaum aufgebaut ist (den man, einmal aufgebaut, auch speichern könnte); ab dann sehr effizient.