J'essaie de construire une liste d'algorithmes / problèmes qui sont "exceptionnellement utiles", comme dans la résolution de problèmes qui semblent "de nature très exponentielle", mais qui ont un algorithme particulièrement intelligent qui les résout finalement. Exemples de ce que je veux dire:
- Programmation linéaire (L'algorithme simplex est un temps exponentiel; il a fallu beaucoup de temps pour trouver une solution temporelle polynomiale!)
- Plus généralement, la programmation semi-définie
- Test de primalité
- 2-SAT et HORNSAT
- Déterminants informatiques (si cela ne semble pas difficile, pensez au permanent)
- Trouver des correspondances parfaites
- Une variété de problèmes théoriques de groupes durs qui peuvent être accomplis en utilisant la classification des groupes simples finis
- Une variété de problèmes de graphes durs qui peuvent être accomplis en utilisant des caractérisations mineures interdites compliquées (intégration sur une surface arbitraire; délimitation de la largeur d'arbre et de la largeur de branche; graphiques réductibles Delta-Wye)
- Calcul d'exponentielles dans un groupe borné (c.-à-d. Calcul d' en étapes, comme accompli par la mise au carré répétée)log b
- Calculs reposant sur l'algorithme LLL. (Cas particulier: algorithme euclidien. Cas plus général: algorithmes PSLQ ou HJLS.)
- Problèmes de contraintes sans termes de Taylor (?). J'avoue que je ne comprends pas complètement cela, mais il semble que cela subsume probablement les cas 2-SAT / HORNSAT ci-dessus et toute algèbre linéaire sur des champs finis. Voir ici pour un article plus long
- Problèmes calculables via des réductions holographiques .
En mention honorable, je mentionnerais également l'isomorphisme graphique, car il est toujours extrêmement facile ( ), et équivalent à tant d'autres problèmes d'isomorphisme:
- Digraphes / multigraphs / hypergraphes (une sorte de problème «plus difficile»)
- Automates finis / CFG
Évidemment, il y a une gamme de difficultés dans ces derniers, mais tous laissent au moins certaines personnes avec un certain sentiment de `` surprise '' dans le sens où le problème peut sembler difficile mais s'avérer traitable. LP peut sembler relativement simple, mais il a fallu un certain temps aux gens pour créer une solution réelle. La quadrature répétée ou la résolution de 2-SAT est quelque chose qu'un étudiant de premier cycle pourrait peut-être trouver seul, mais si vous n'aviez appris que des problèmes NP-Complete sans avoir vu HORNSAT, cela pourrait ressembler à un candidat naturel pour NP-Completeness. Résoudre le CFSG ou avoir un moyen polynomial pour vérifier la réductibilité Delta-Wye ne sont pas des exploits moyens.
J'espère que cela a du sens; il y a évidemment beaucoup d'attributs subjectifs ici, mais je suis curieux d'entendre ce que les autres trouvent comme des solutions efficaces à des problèmes "évidemment difficiles".
la source
Réponses:
Pour moi, l'un des algorithmes les plus efficaces est l'algorithme Blossom V qui trouve la correspondance parfaite de poids maximum dans un graphique général:
https://en.m.wikipedia.org/wiki/Blossom_algorithm
la source
Pour moi, tous les algorithmes classiques et les plus récents et les plus efficaces pour vérifier ou trouver un arbre couvrant minimum (MST) d'un graphe à pondération de bord connecté sont de bons candidats. Beaucoup de ces algorithmes sont répertoriés dans wikipedia .
À première vue, ce problème ressemble au problème du voyageur de commerce, l'un des rares problèmes NP-hard les plus connus. Plus étonnant, il existe des algorithmes linéaires pour vérifier un MST et de nombreux algorithmes quasi linéaires pour trouver un MST! En fait, l'un des problèmes ouverts les plus connus dans les algorithmes est de savoir s'il existe un algorithme linéaire déterministe pour trouver un MST dans les graphiques généraux. Il s'avère qu'il existe de riches structures et propriétés mathématiques et graphiques ainsi qu'une multitude d'applications pratiques associées au MST, ce qui en fait l'un des sujets les plus agréables et les plus extensibles du cours d'informatique. Pour une introduction complète légèrement dépassée mais très bien écrite, veuillez consulter le tutoriel de Jason Eisner .
la source