OVH Cloud OVH Cloud

[Semi débutant] Arbre de chaines

3 réponses
Avatar
Nicolas Cherel
Bonjour,

J'aurais besoin de créer un dictionnaire sous forme d'arbre
du style :
a---u---x //aux
| |-t---a---n---t //autant
|-i---m---é //aimé
| | |-e //aime
| |-e //aie
|-p---r---è---s //après

Cela me permettrait de faire des recherche de correspondances rapides.
(je voudrais éviter de faire la correspondance sur de nombreux mots
commançant pareil)

Cela a t'il déjà implémenté ?
Y a t'il une structure de donnée de l'API qui me permettrait de faire ca
facilement ?

Merci d'avance

3 réponses

Avatar
Nico
Salut,

pourquoi ne pas simplement utiliser un HashSet ou HashMap, avec le mot comme
clé ?
Ca ira sans doute plus vite qu'un arbre en performances et y a rien a coder.


"Nicolas Cherel" a écrit dans le message de
news:422632af$0$32270$
Bonjour,

J'aurais besoin de créer un dictionnaire sous forme d'arbre
du style :
a---u---x //aux
| |-t---a---n---t //autant
|-i---m---é //aimé
| | |-e //aime
| |-e //aie
|-p---r---è---s //après

Cela me permettrait de faire des recherche de correspondances rapides.
(je voudrais éviter de faire la correspondance sur de nombreux mots
commançant pareil)

Cela a t'il déjà implémenté ?
Y a t'il une structure de donnée de l'API qui me permettrait de faire ca
facilement ?

Merci d'avance


Avatar
Vincent Lascaux
J'aurais besoin de créer un dictionnaire sous forme d'arbre
du style :
a---u---x //aux
| |-t---a---n---t //autant
|-i---m---é //aimé
| | |-e //aime
| |-e //aie
|-p---r---è---s //après

Cela me permettrait de faire des recherche de correspondances rapides.
(je voudrais éviter de faire la correspondance sur de nombreux mots
commançant pareil)


Si le but est d'obtenir une liste des mots ayant un certain préfixe, il
serait surement moins gourmand en mémoire et plus performant de garder un
tableau trié des mots et d'effectuer deux recherches binaires :
- Le plus grand index i tel que mots[i] < prefixe
- Le plus petit index i tel que prefixe < mots[i]
L'opérateur < utilisé étant une comparaison lexicographique en se limitant à
la taille du plus petit des mots.
L'ensemble des mots ayant le préfixe est entre les deux indexes.

Programmer ca ne devrait pas être très compliqué (ArrayList, sort, je pense
qu'il faut faire l'algo de recherche binaire à la main par contre)

--
Vincent

Avatar
Nicolas Cherel
Vincent Lascaux wrote:
J'aurais besoin de créer un dictionnaire sous forme d'arbre
du style :
a---u---x //aux
| |-t---a---n---t //autant
|-i---m---é //aimé
| | |-e //aime
| |-e //aie
|-p---r---è---s //après

Cela me permettrait de faire des recherche de correspondances rapides.
(je voudrais éviter de faire la correspondance sur de nombreux mots
commançant pareil)



Si le but est d'obtenir une liste des mots ayant un certain préfixe, il
serait surement moins gourmand en mémoire et plus performant de garder un
tableau trié des mots et d'effectuer deux recherches binaires :
- Le plus grand index i tel que mots[i] < prefixe
- Le plus petit index i tel que prefixe < mots[i]
L'opérateur < utilisé étant une comparaison lexicographique en se limitant à
la taille du plus petit des mots.
L'ensemble des mots ayant le préfixe est entre les deux indexes.

Programmer ca ne devrait pas être très compliqué (ArrayList, sort, je pense
qu'il faut faire l'algo de recherche binaire à la main par contre)



Bien vu, et merci, je n'y avait pas pensé...