Algorithmes puissants trop complexes à implémenter


67

Quels sont les algorithmes d’utilité légitime tout simplement trop complexes à mettre en œuvre?

Soyons clairs: je ne cherche pas d’algorithmes comme l’algorithme actuel de multiplication de matrice optimale asymptotique (Coppersmith-Winograd), qu’il est raisonnable de mettre en œuvre mais dont la constante est inutile en pratique. Je recherche des algorithmes susceptibles d'avoir une valeur pratique, mais ils sont si difficiles à coder qu'ils n'ont jamais été implémentés, mis en œuvre uniquement dans des environnements extrêmement artificiels, ou mis en œuvre uniquement pour des applications remarquablement spéciales.

Des algorithmes presque impossibles à mettre en œuvre sont également les bienvenus. Ils présentent de bonnes asymptotiques, mais leurs performances réelles sont probablement médiocres.


1
faire cette CW, car il pourrait être une longue liste.
Suresh Venkat

4
Existe-t-il une métrique pour «presque impossible à mettre en œuvre»? Y a-t-il une théorie qui le définit?
Ritwik Bose le

@Mechko, peut-être une limite inférieure sur la taille de la plus petite machine de Turing qui fournit une description d'une machine de Turing qui est une implémentation de l'algorithme. :)
Radu GRIGore le

@Radu GRIGore est-ce une métrique acceptée ou qui devrait être développée? Je suppose qu'il existe (pour l'instant) une ligne simple et immuable qui définit "meh, ça ne vaut pas la peine" ...: D
Ritwik Bose le

4
Je suis intéressé par la suggestion que Coppersmith-Winograd est raisonnable à mettre en œuvre. Est-ce que quelqu'un a déjà vu une implémentation écrite même dans un pseudo-code de haut niveau et est-ce que quelqu'un a déjà estimé les constantes?
Raphaël

Réponses:


33

Chazelle a donné un algorithme de temps linéaire pour trianguler un polygone simple . Skiena a écrit (p. 575, Manuel de conception d'algorithmes) qu'il était "suffisamment désespéré pour être mis en oeuvre de sorte qu'il soit davantage qualifié de preuve d'existence"


3
L'algorithme a-t-il des constantes raisonnables?
jbapple

Est-ce le seul algorithme de temps linéaire connu pour le problème?
Thomas Ahle

2
@ThomasAhle Je crois que c'est le seul algorithme de temps linéaire déterministe connu. Amato, Goodrich et Ramos en ont un plus simple, randomisé: cs.princeton.edu/courses/archive/fall05/cos528/handouts/…
Sasho Nikolov

À ma connaissance, l'algorithme de triangulation simple par polygones de temps linéaire de Chazelle n'a jamais été mis en œuvre et ne le sera probablement jamais à cause de sa complexité et également parce que les constantes sont élevées et qu'il ne pourra donc pas rivaliser avec des alternatives dans la pratique. Réalisation théorique majeure cependant. Ralph Boland
Ralph Boland

Je vais demander à nouveau: l'algorithme a-t-il des constantes raisonnables?
user1271772

29

L' algorithme de Risch pour le calcul des primitives élémentaires. Selon Wikipedia, aucun logiciel n'est connu pour implémenter l'algorithme complet en raison de sa complexité.


3
Wikipedia souligne également qu'il ne s'agit pas d'un algorithme mais d'un semi-algorithme car il nécessite des heuristiques pour résoudre le problème constant.
sclv

Qu'est-ce que l'heuristique? Pouvez-vous donner un lien pour en savoir plus à ce sujet?
Zygimantus

22

Tout algorithme qui utilise les résultats de Robertson-Seymour pour déduire un algorithme "polytime" pour des choses impliquant des graphes qui excluent un mineur fixe pose des problèmes. La constante cachée dans leur résultat est "galactique".


3
Est-ce aussi difficile à mettre en œuvre ou a simplement une énorme constante?
Lev Reyzin

5
Oui, cela ne semble pas être un bon exemple. Si je comprends bien, la question concerne des algorithmes qui pourraient être pratiques (donc probablement de «petites» constantes) mais qui sont tout simplement trop complexes pour être mis en œuvre. Bien sûr, toute la question est ouverte à différentes interprétations :-)
Aryabhata le

5
Le problème est que la constante provient de la très grande liste de mineurs que l'on doit exclure pour une propriété particulière. Je ne connais aucun moyen de générer la liste souhaitée de mineurs exclus pour une propriété donnée. Ce n'est donc pas uniquement un problème d'échelle.
Suresh Venkat le

2
Par exemple, nous ne connaissons même pas la liste des mineurs exclus pour les graphiques intégrables dans le tore.
Derrick Stolee

17
Le problème ici semble plus profond: il n’existe aucun moyen efficace de générer la liste des mineurs, ce qui ne donne en réalité aucun algorithme. La plupart des propriétés mineures-fermées donnent une liste infinie de mineurs exclus, si on traduit directement l'expression logique. Le théorème de Robertson-Seymour (conjecture de Wagner) nous indique qu'une liste finie de mineurs exclus se cache à l'intérieur de cette liste infinie, mais le théorème ne nous aide absolument pas à les trouver. Donc, Robertson-Seymour mène donc généralement à une preuve de l'existence pure.
András Salamon le

16

O(n)O(log2nB)B

Le document fait 55 pages et sa conclusion note plusieurs améliorations aux constantes que l'auteur ne décrit pas pour des raisons d'espace. Cela me fait penser que les constantes ne sont peut-être pas si galactiques et que cette structure de données serait "d'utilité légitime", d'autant plus qu'elle a été citée à plusieurs reprises.


12

L'algorithme d'unification de modèle d'ordre supérieur à temps linéaire de Qian n'a jamais été mis en œuvre en raison de sa complexité telle que je l'avais mentionné.


Heureusement, il existe encore des algorithmes pratiques. Le manuel de raisonnement automatisé dit que cela peut être fait en temps réel (juste à côté de l’algorithme de Qian), c’est génial.
Jake

11

Algorithme linéaire pour vérifier si un graphique peut être intégré dans une surface fixe.

Ken-ichi Kawarabayashi, Bojan Mohar, Bruce A. Reed: Un algorithme linéaire plus simple pour l’incorporation de graphes dans une surface arbitraire et le genre des graphes de largeur d’arbre délimité. FOCS 2008: 771-780.

Bojan Mohar: Algorithme temporel linéaire pour l'incorporation de graphes dans une surface arbitraire. SIAM J. Discrete Math. 12 (1): 6-26 (1999)


1
Il est peu probable que cela ait une valeur pratique même si elle est mise en œuvre, en raison de la grande dépendance exponentielle (sic) vis-à-vis du genre.
Jeffε

8

Je ne sais pas si cela pourrait être utile en pratique (même si je pense au repliement et à la comparaison de protéines, ainsi qu’à la prédiction de la structure secondaire de l’ARN), mais Wolfgang Haken a donné le premier algorithme en temps polynomial permettant de décider si un noeud est un noeud. boucle simple ( Theorie der Normalflächen. Acta Math. 105, 1961, pp. 245–375). Si je me souviens bien, c'est encore trop compliqué à mettre en œuvre toutes ces décennies plus tard.

Si l'on en croit Wikipedia, plusieurs autres algorithmes ont été donnés plus tard, et "Comprendre la complexité de ces algorithmes est un domaine d'étude actif.".


4
Haken a donné le premier algorithme, mais il ne s'exécute pas en temps polynomial; en fait, aucun algorithme multi-temps (ni résultat de dureté NP) n'est connu. Des travaux plus récents ont réduit la trivialité des nœuds (via la formulation de surface normale de Haken) à la programmation en nombres entiers, qui est généralement rapide à résoudre dans la pratique.
Jeff

3

Décomposition des arbres , et peut-être des tas de Fibonacci .


14
Les tas de Fibonacci ne sont certainement pas trop compliqués à mettre en œuvre; ils ont été mis en œuvre et testés. Le problème avec eux, c’est plutôt que leur performance pratique n’est pas aussi bonne que celle de certains autres tas en raison de facteurs de longue durée relativement constants.
David Eppstein le

1
J'ai écrit un paquet pour trouver la décomposition des arbres, et je ne pense pas qu'il soit difficile d'implémenter yaroslavvb.blogspot.com/2011/01/building-junction-trees.html
Yaroslav Bulatov le

2
Mon code est juste une décomposition arborescente heuristique, pas optimale comme les approches de programmation dynamique et branchée-liée ... Je suppose que vous vouliez dire "Un algorithme temporel linéaire ..."? Je n'ai vu aucune implémentation de cela
Yaroslav Bulatov le

4
2O(k3)O(n)

3
Je pense que c'est le meilleur effort d'implémentation: hein.roehrig.name/dipl
Diego de Estrada

1

Une construction de hachage parfaite ( https://en.wikipedia.org/wiki/Perfect_hash_function#Construction ) s'appliquerait à tous les cas d'utilisation avec des clés statiques ou peu changeantes (par exemple, noms de domaine de niveau supérieur sur les routeurs, mots-clés dans les compilateurs ou noms de fonction dans les bibliothèques standard), mais la dernière fois que j’ai regardé, je n’ai trouvé aucune implémentation.

La recherche paramétrique peut résoudre de nombreux problèmes d'optimisation difficiles, y compris ceux qui pourraient sembler devoir être NP-difficiles, en temps polynomial. La recherche papier bien nommée Parametric made pratique implémente une variante de la recherche paramétrique, mais je ne pense toujours pas qu'elle ait été implémentée dans un logiciel pratique.

knO(nlogn+k)O((n+k)logn)


1
Je refuse de croire que la construction de FKS est trop complexe à mettre en œuvre. C'est en fait assez simple. Peut-être pas pratique, mais certainement pas trop complexe à mettre en œuvre.
Sasho Nikolov
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.