La résolution de la cruche d'eau problème
Lors de la lecture par le biais de certains notes de cours préliminaires de la théorie des nombres, je suis tombé sur la solution à
l'eau de la cruche de problème (avec deux cruches) qui est résumé ainsi:
L'aide de la propriété de la G. C. D de deux nombres que PGCD(a,b) est le plus petit possible combinaison linéaire de a et de b, et donc une certaine quantité Q n'est mesurable par les 2 cruches, ssi Q est un n*PGCD(a,b), puisque Q=sA + tB, où:
n = a positive integer
A = capacity of jug A
B= capacity of jug B
Et, ensuite, la méthode de la solution est discutée
Un autre modèle de la solution est de modéliser les différents états comme un état de l'espace de recherche du problème, comme souvent, le recours à l'Intelligence Artificielle.
Ma question est: est Ce que d'autres méthodes existent pour les modèles de la solution, et comment? Google n'a pas jeter beaucoup.
OriginalL'auteur | 2009-03-13
Vous devez vous connecter pour publier un commentaire.
Strictement pour 2 Cruche Problème
Q = Litres dont vous avez besoin.
Remarque: Le Q doit être un multiple de Pgcd(A,B) sinon, il n'y a pas de solution. Si Pgcd(A,B) == 1, Il existe une solution pour Tout Q.
1) Méthode 1 :
Étendue d'Euclide l'Algorithme permettra de résoudre plus rapidement que n'importe quel Algorithme Graphique.
2) Méthode 2:
Voici un Approche Naïve. (à noter que cela peut jeter 2 solutions, Vous aurez à choisir ce qui est plus court)
Le Problème en question peut être simplement résolu par
repeatedly
de Remplissage d'un seau Un à l'autre seau B (l'ordre n'importe pas) jusqu'à ce qu'il se remplit avec le montant que vous voulez...ofcoz, lorsqu'un seau fillsup, videz-la et continuez.À plusieurs reprises Remplir Un->B
Permet d'essayer et observer ce qui se passe si nous allons dans l'autre sens,
Remplissez B->Un
Dans ce cas de remplissage B->Un nous donne l'objectif de l'état plus vite qu'Un->B
Générique N Cruches
Voici une intéressante papier
Je ne le pense pas. Ne pouvez pas dire à coup sûr. Avez-vous la preuve?
Nope. C'était une question. Je l'avais essayé dans un problème avec hit et d'essai pour les petits de 5-6 paires. Vous ne savez pas si il fonctionne pour tous.
Est-il possible d'avoir des cruches avec de tels volumes qu'il prend le même nombre d'étapes pour les deux types d'approches: remplir Une première et remplissage B en premier??
Le lien pour le papier (à la fin) est un lien mort.
OriginalL'auteur st0le
Un étonnant et amusant approche (pour 3 cruches) est par coordonnées barycentriques (vraiment!), comme décrit sur le toujours excellent site Cut-the-Knot: Coordonnées barycentriques: Une Curieuse Application.
OriginalL'auteur ShreevatsaR
Ce type de problème est souvent prête à la programmation dynamique techniques. J'ai ofetn vu ce problème spécifique utilisé comme exemple dans les opérations de recherche en cours. Une belle étape-par-étape, la description est ici.
OriginalL'auteur mtnygard
De l'espace de recherche de la méthode est ce que j'ai suggéré. J'ai fait un programme pour résoudre générique carafe d'eau de problèmes à l'aide d'un BFS. Pourriez vous l'envoyer si vous le souhaitez.
OriginalL'auteur
J'ai rencontré ce problème lors d'un de mes études. Comme vous, et comme st0le dit ici, j'ai trouvé comme réponse au problème de l'algorithme d'Euclide Étendu. Mais cette réponse ne satisfait pas moi, parce que je pense que c'est une réponse quantitative, pas une qualitatif (qui est, l'algorithme ne permet pas de dire ce que l'étape à franchir pour atteindre le résultat).
Je crois que j'ai trouvé une autre solution au problème qui est toujours d'atteindre le résultat avec le nombre minimum d'étapes.
Ici, il est:
Choisir le service à la cruche (qui est, celui qui vous permettra de la remplir à la pompe). En supposant que A > B (vous pouvez trouver facilement la cruche qui est le plus grand):
démarrer le processus de remplissage:
remplir avec la pompe, le service à la cruche (si vide)
remplir l'autre cruche à l'aide de la service un
vérifier la plénitude de l'autre cruche et, dans le cas où, le vide
arrêter lorsque la plus grande cruche contient Q
Ci-dessous vous trouverez une très naïve de la mise en œuvre de l'algorithme en c++. Hésitez pas à le réutiliser, ou d'améliorer ce que vous avez besoin.
Je ne sais pas si il y a de tout concept mathématique derrière le processus que j'ai décrit pour choisir la bonne cruche de réduire le nombre d'étapes nécessaires, je l'utilise comme une heuristique.
J'espère que cela peut vous aider.
OriginalL'auteur iluke