8
votes

Word Jumble Algorithme

Compte tenu d'un mot de chasble (c'est-à-dire debaor), quelle serait une approche de déchiffrer les lettres pour créer un vrai mot (c'est-à-dire Foobar)? Je pouvais voir cela avoir quelques approches, et je pense que je sais comment je le ferais dans .net, mais je curieux de voir quelles autres solutions ressemblent (toujours heureuses de voir si ma solution est optimale ou non).

Ce n'est pas des devoirs ou de quoi que ce soit comme ça, je viens de voir un mot jumble dans la section des bandes dessinées locales du papier (oui, de bonne idée de la marque OL ') et l'ingénieur en moi a commencé à penser.

EDIT: Veuillez poster un pseudo code ou un code réel si vous le pouvez; Il est toujours agréable d'essayer d'élargir les connaissances linguistiques en voyant des exemples comme celui-ci.


0 commentaires

6 Réponses :


1
votes

Créez toutes les permutations de la chaîne et regardez-les dans un dictionnaire.

Vous pouvez optimiser en levant des chaînes plus courtes qui commencent les mots, et s'il n'y a pas de mots de longueur appropriée dans le dictionnaire qui commencent par ces cordes, éliminant les permutations à partir de ces lettres de la considération supplémentaire.


0 commentaires

14
votes

avoir un dictionnaire qui est saisi par les lettres de chaque mot dans la commande triée. Ensuite, prenez-vous un triant les lettres - recherchez tous les mots du dictionnaire par cette chaîne de lettre triée.

Donc, comme exemple, les mots «ours» et «nus» seraient dans le dictionnaire comme suit: xxx

et si vous avez donné le jumble, "écouteur", vous triez les lettres à "Aber" et être capable de regarder les deux mots possibles du dictionnaire .


0 commentaires

1
votes

CodeProject a quelques articles ici et ici . La seconde utilise la récursion. Wikipedia décrit également quelques algorithmes ici . L'article Wikipedia mentionne également un programme appelé Jumbo qui utilise une approche plus heuristique qui résout le problème comme un serait humain. Il semble y avoir quelques approches du problème.


0 commentaires

1
votes

Selon la longueur de l'approche du tourbillon à cordes pourraient être plus rapide, mais une solution alternative de le faire, qui a plus ou moins de complexité O (n) au lieu de créer toutes les permutations de la chaîne et de les regarder, vous allez Grâce à tous les mots du dictionnaire et voyez si chacun peut être construit à partir de la chaîne d'entrée.

A vraiment algorithme intelligent qui connaît le nombre de mots dans le dictionnaire à l'avance pourrait faire quelque chose comme ceci: xxx


0 commentaires


0
votes

Une approche consiste à diviser votre dictionnaire en sous-dictionnaires triés avec des longueurs spécifiques, comme des mots de 1 lettre, des mots de 2 lettres, ... Lorsque vous recherchez des mots d'un certain chouble, comparez le nombre de permutations possibles avec le nombre de mots dans le dictionnaire correspondant. Si le premier est plus grand, comparez les mots dans le dictionnaire à la recherche, si ce dernier est, puis créez des permutations puis recherchez ceux de votre dictionnaire. Vous pouvez également l'optimiser davantage en divisant les dictionnaires en sous-ensembles plus petits en fonction de leurs premières lettres et à quel point ils apparaissent fréquemment, puis divisent ensuite en fonction de la deuxième lettre. Plus de division pourrait aussi compliquer de manière significative la base de données et ralentir la recherche.


0 commentaires