hw recherche de sous-chaîne dans une liste de indexés cordes?

j'implémente le dictionnaire dans lequel la clé est un mot clé string.supposons que j'ai les clés suivantes dans le dictionnaire.

mat hon sat hon lat hon

maintenant, si je recherche un seul mot-clé supposons que mathon il va chercher en temps constant.mais si je dois chercher hon je veux que tous les trois mots soient retirés en temps constant ou en temps minimum possible comme en cas de recherche de google.quelle devrait être ma démarche? et est dictionnaire de droit discbased pour but?

valeur du dictionnaire est la liste des éléments que je dois afficher à l'utilisateur et la recherche peut être fondée sur plusieurs mots clés.

1
demandé sur Ian Elliott 2009-05-21 09:33:51

1 réponses

un gaddag, comme décrit dans ce document , est probablement votre meilleur pari. c'est une variante sur un trie qui vous permet de commencer à chercher n'importe où dans un mot, et marche à la fois en avant et en arrière. ce n'est pas O (1) lookup, mais il est assez rapide et a une utilisation raisonnable de l'espace.

edit: et pour plusieurs mots-clés, vous pouvez simplement rechercher individuellement sur chaque mot-clé et puis faire une intersection ou une union définie selon. il est probablement plus rapide que vous le pensez; à le moins intéressant de mettre en œuvre comme l'algorithme le plus simple-possible-et de jeter seulement si elle s'avère être un goulot d'étranglement réel lors du profilage.

1
répondu Martin DeMello 2009-05-21 07:08:45