Considérez la tâche algorithmique suivante:
Entrée: un entier positif , avec sa factorisation première
Trouver: des entiers positifs qui minimisent , sous réserve de la restriction quex , y , z x y + y z + x z x y z = n
Quelle est la complexité de ce problème? Existe-t-il un algorithme à temps polynomial? Est-ce NP-difficile?
Ce problème pose essentiellement: parmi tous les solides rectangulaires dont le volume est et dont les dimensions sont tous des entiers, lequel a la plus petite surface?
Ce problème a été posé par Dan Meyer, sous le titre Le problème mathématique que 1000 professeurs de mathématiques n'ont pas pu résoudre . Jusqu'à présent, aucun des professeurs de mathématiques avec lesquels il a travaillé n'a trouvé d'algorithme raisonnable pour ce problème. Dans son contexte, la définition de «raisonnable» est un peu imprécise, mais en tant qu'informaticiens, nous pouvons poser une question plus précise sur la complexité de ce problème.
L'approche évidente consiste à énumérer toutes les possibilités pour , mais cela prend un temps exponentiel. Les commentateurs du blog de Dan Meyer ont proposé de nombreux algorithmes candidats efficaces qui se sont malheureusement tous révélés incorrects. Martin Strauss suggère que ce problème semble vaguement faire penser à 3 partitions , mais je ne vois pas de réduction.
Permettez-moi également de clarifier certaines idées fausses que j'ai vues dans les commentaires / réponses:
Vous ne pouvez pas réduire à partir de 3 partitions en remplaçant simplement chaque nombre par sa puissance , car les fonctions objectives des deux problèmes sont différentes. La réduction évidente ne fonctionne tout simplement pas.2 q
Il n'est pas vrai que la solution optimale implique de choisir l'un des pour être le diviseur le plus proche de à . Je vois plusieurs personnes qui supposent que c'est le cas, mais en fait, ce n'est pas correct. Cela a déjà été réfuté sur le blog de Dan Meyer. Par exemple, considérons ; et 4 divise 68, donc vous pourriez penser qu’au moins un des devrait être 4; cependant, ce n'est pas correct. La solution optimale est , , . Un autre contre-exemple est , , mais la solution optimale estn 3 √ n=683 √x,y,zx=2y=2z=17n=2223 √x=37 , , . (Il pourrait être vrai que pour tout , la solution optimale implique de faire au moins un de égal au plus petit diviseur de supérieur à ou au plus grand diviseur de plus petit que - Je n'ai pas de contre-exemple pour le moment - mais si vous pensez que cette affirmation est vraie, elle aurait besoin d'une preuve. Vous ne pouvez absolument pas supposer qu'elle est vraie.)
"Faire en sorte que soient de la même taille" ne semble pas nécessairement donner la réponse optimale dans tous les cas; voir le blog de Dan Meyer pour les contre-exemples. Ou, au moins, pour certaines interprétations raisonnables de l'expression "faites-les à peu près la même taille", il existe des contre-exemples montrant que cette stratégie n'est pas en fait optimale. Si vous souhaitez essayer une stratégie de ce type, assurez-vous de formuler la réclamation avec précision, puis fournissez une preuve mathématique précise.
Un temps d'exécution de n'est pas polynomial. Pour que ce problème soit en P, le temps d'exécution doit être un polynôme dans la longueur de l'entrée . La longueur de l'entrée est quelque chose comme , pas . L'algorithme de force brute évident peut être fait pour fonctionner en temps ou , mais c'est exponentiel en et compte donc comme un algorithme temps exponentiel. Ce n'est donc pas utile.
Réponses:
Voici une version modifiée d'un algorithme "choisir un diviseur près de la racine du cube". Il doit encore forcer brutalement de nombreux cas, donc je ne sais pas à quel point il s'agit d'une réelle amélioration par rapport à l'énumération de tous les cas. Cependant, je l'ai soumis comme correction à l'algorithme sur OEIS (celui qui a généré des résultats incorrects) parce que je pense qu'il devrait être précis au moins.
Voici l'algorithme pour trouver (s1, s2, s3) et la surface d'un prisme rectangulaire étant donné son volume n:
Cet algorithme énumère certains des triplets (s1, s2, s3) mais n'a besoin que de tester les diviseurs sous la racine du cube. (Étant donné que les trois diviseurs ne peuvent pas tous être au-dessus de la racine du cube). De la même manière, s2 n'a qu'à tester les diviseurs de n / s1 sous la racine carrée de n / s1, car les deux diviseurs ne peuvent pas être au-dessus de la racine carrée)
Remarque sur l'étape 3: si la racine du cube est un diviseur, alors n est un cube et nous pouvons nous arrêter là avec une surface minimale 6 * s1 ^ 2 de la boîte (s1, s1, s1).
Python:
la source
Le problème serait bien sûr lié à la complexité de l'affacturage si les décompositions principales n'étaient pas données. Étant donné les facteurs et en prenant des journaux de tous les facteurs premiers, ce problème semble être à peu près le même que celui de minimiser l'écart par rapport à la moyenne des sommes de partition (l'exercice, peut-être analytique ou expérimental, trouve à quel point cette approximation intuitive de la problème tient).k
Voici le cas à 3 voies (les sommes de partition sont ). le cas à 2 voies a été largement étudié et est NP difficile (à partir de la 1ère réf). (Ce cas 2 voies est pas tout à fait le même que le NP-complet 2 voies connu problème de la partition où des sommes de partition sont égales. Remarque sommes égales de partition implique 0 écart des sommes de séparation et vice - versa. ) Les 2 e études ref 3- partitionnement à sens et à n voies , en partie empiriquement, où il n'y a pas autant d'études que le cas à 2 voies.log(x),log(y),log(z) n
Le problème difficile le plus simple: partitionnement des nombres / Mertens
Partitionnement de numéros à plusieurs voies / Korf
la source
modifier
Voici un argument informel pour expliquer pourquoi il est peu probable qu'un algorithme rapide existe. Cette phrase n'a pas changé, mais j'ai supprimé ce qui était ici parce qu'elle était trop structurée comme la preuve formelle dans la section suivante et la discussion se détournait de ses bugs, dont certains que j'ai remarqués moi-même et un dont DW m'a gentiment fait remarquer. Permettez-moi plutôt d'essayer d'exprimer l'intuition qui se cache derrière.
Que se passe-t-il lorsque nous traduisons les mêmes étapes dans une algèbre différente, comme l'addition et la soustraction au lieu de la multiplication et de la division? Nous savons (voir le lemme ci-dessous) que notre algorithme trouvera une 3-partition dont les produits sont égaux, s'il en existe une, ou bien déterminera qu'il n'y a pas une telle 3-partition. Donc, si nous pouvions traduire les mêmes techniques dans le groupe additif, nous pourrions trouver une partition à 3 dont les sommes sont égales, ou déterminer qu'aucune telle partition n'existe. En d'autres termes, nous pourrions résoudre 3 partitions en temps polynomial. Ce n'est pas très plausible.
Alors, pourquoi un tel algorithme pourrait-il fonctionner pour la multiplication et échouer pour l'addition? Une raison possible est que chaque entier a une factorisation première unique sous multiplication, mais est cyclique sous addition. Une autre est que la multiplication forme un anneau avec addition, vous avez donc un autre ensemble d'opérations que vous pouvez utiliser. Un autre est que vous devrez généraliser l'algorithme pour qu'il fonctionne pour les non-premiers, et cela pourrait dépendre de leur primalité. Celui que DW a souligné est que la méthode de traduction spécifique peut augmenter de façon exponentielle la taille de vos entrées. Et peut-être P = NP après tout.
Mais si ce sont les failles qui permettent à un algorithme rapide de fonctionner, je pense qu'il est toujours utile de le savoir, car il suggère où nous devrions concentrer nos efforts. Nous devrions chercher quelque chose qui se briserait si nous essayions de l'appliquer à un problème NP-complet. Une approche qui généraliserait à d'autres algèbres consiste probablement à aboyer le mauvais arbre. Je soupçonne, cependant, que la multiplication n'est pas vraiment assez différente pour que cela fonctionne, mais ce n'est qu'un pressentiment.
Lemme
Ma motivation immédiate pour prouver cela était de remplir une vague de main dans ma preuve ci-dessus que, si une solution de cube parfait existe, elle est optimale. Cependant, cette formule pourrait être utile pour l'élagage de l'arbre de recherche.
Pensées variées
Je ne vois aucune symétrie évidente, sauf l'interchangeabilité de x, y et z, qui ne nous donne au mieux qu'un facteur constant de 6. Nous avons quelques accélérations pour la partition 2 qui disent essentiellement que nous voudrions que les deux termes soient être aussi proches les uns des autres que possible, mais je ne vois pas immédiatement d'application à ce problème.
Du haut de ma tête, le simple fait de prendre le journal de tous les nombres le réduit immédiatement à un problème classique à 3 partitions en utilisant l'addition, ou de manière équivalente, en prenant un certain nombre à la puissance des nombres dans n'importe quel problème d'addition à 3 partitions le transforme en un problème de multiplication comme celui-ci. Cela implique que ce problème ne devrait pas être plus facile. Nous avons ici la factorisation principale, alors que cette factorisation ne serait pas première, mais cela nous aide-t-il?
Graphiquement, la surface xyz = 0 ressemblerait à l'union des plans xy, yz et xz, et pour tout n positif, l'équation ressemblerait à y = n / xz, donc chaque tranche le long d'un plan de coordonnées serait une hyperbole. Nous pouvons généralement dire que la quantité que nous essayons de minimiser est la plus faible à l'origine et croît le plus rapidement le long de la ligne où x = y = z. Si nous ne pouvons rechercher que le long de cette variété, nous pourrions être en mesure de réduire à un problème à deux dimensions.
la source