2

Disons que j'ai un ensemble de lettres {a, b, c, t} et un dictionnaire de fonction (s) qui retourne T/F pour vérifier si une chaîne s existe dans le dictionnaire anglais. Construisez des mots valides en utilisant la recherche approfondie en profondeur.Profondeur Première recherche: Soit un ensemble de lettres construire des mots valides

Je ne demande pas de code ici. J'ai besoin d'aide avec la structure de l'arbre. Je ne suis pas capable de visualiser la structure de l'arbre dans ce problème.

Par exemple, ces quatre lettres peuvent être dans une seule colonne pour s DFS. Alors dois-je construire l'arbre pour toutes les permutations possibles et ensuite effectuer un DFS?

Edit: je dois construire des mots de taille 3.

Exemple:

 a    b 
    /   /
     b    c 
    /   /
    c    t 
/   /
    t    a 
+0

Il n'est pas nécessaire de représenter explicitement l'arbre; Supposez simplement que chaque lettre est valide dans chaque position. Si je comprends bien la question, le problème n'a pas de sens sans une restriction sur la longueur des mots. – Codor

+0

@Codor: Merci pour le commentaire. Tu as raison. J'ai besoin de construire des mots de taille 3. Si le problème me demande une approche DFS, alors je pense qu'il est juste que je sois capable de dessiner la structure arborescente. Je peux résoudre cela en utilisant la force brute, mais je veux utiliser DFS et donc besoin de visualiser la structure de l'arbre. –

+0

La structure arborescente aurait une racine avec une chaîne vide '' ''. À chaque étape, vous choisissez une lettre parmi les lettres disponibles. Cela signifie 4 enfants de la racine et 3 enfants chacun pour les nœuds à la profondeur 1, 2 enfants chacun pour les nœuds à la profondeur 2. Total des nœuds feuilles est '4 x 3 x 2' qui est également égal à' 4P3'. Vous devriez vérifier T/F chaque fois que vous atteignez un nœud feuille (c'est quand vous avez réellement un mot) –

Répondre

1

Structure Arbre:

Vous pouvez construire un arbre à chaque noeud représentant une lettre dans la alphabet. Un noeud serait potentiellement lié à toutes les lettres de l'alphabet.

Dicitionary de charge:

mots de charge et construire arbre. Chaque lettre du mot nous ferait marcher à travers l'arbre à partir de la racine. Si nous frappons un null dans l'un des liens, puis créer un nouveau nœud.

Utilisation:

Ensuite, il suffit automne à travers le premier lien jusqu'à ce que vous frappez un drapeau endOfWord, ce qui signalerait un mot.

typedef struct { 
    char *letter[ 26 ]; 
    bool endOfWord; 
} 

Le nœud racine serait nul comme point de départ.

+0

Vous voudriez avoir un drapeau séparé pour marquer la fin d'un mot plutôt qu'un nœud NUL afin que les mots puissent être des préfixes de mots plus longs. D'où "arbre préfixe". –

+0

@MartinBroadhurst Merci! J'ai eu un drapeau dans la structure pour marquer la fin des mots mais enlevé en raison probablement du manque de sommeil. Corrigée! – namar0x0309