Deux manières d’analyser l’efficacité d’un algorithme sont:
- mettre une limite supérieure asymptotique sur son temps d'exécution, et
- pour l'exécuter et collecter des données expérimentales.
Je me demande s’il existe des cas connus où il existe un écart important entre (1) et (2). Par cela, je veux dire que soit (a) les données expérimentales suggèrent un asymptotique plus étroit, soit (b) il existe des algorithmes X et Y tels que l'analyse théorique suggère que X est bien meilleur que Y et les données expérimentales suggèrent que Y est bien meilleur que X.
Comme les expériences révèlent généralement un comportement de cas moyen, je pense que les réponses les plus intéressantes se réfèreront aux bornes supérieures du cas moyen. Cependant, je ne veux pas exclure des réponses potentiellement intéressantes qui parlent de différentes limites, telles que la réponse de Noam à propos de Simplex.
Inclure les structures de données. S'il vous plaît mettez un algo / ds par réponse.
la source
Réponses:
L'exemple le plus frappant est bien sûr la méthode Simplex qui fonctionne rapidement dans la pratique, suggérant la poly-timeness, mais prend un temps exponentiel en théorie. Dan Spielman vient de recevoir le prix Nevanlinna dans une large mesure pour avoir expliqué ce mystère.
Plus généralement, de nombreux cas de programmation Integer peuvent être résolus très bien avec les solveurs IP standard, par exemple les enchères combinatoires pour la plupart des distributions tentées sur des entrées de taille significative peuvent être résolues - http://www.cis.upenn.edu/~mkearns /teaching/cgt/combinatorial-auctions-survey.pdf
la source
Bases de Groebner . Le temps d'exécution le plus défavorable est doublement exponentiel (en nombre de variables). Cependant, dans la pratique, en particulier pour les problèmes bien structurés, les algorithmes F4 et F5 sont efficaces (c'est-à-dire qu'ils se terminent assez rapidement). Il reste encore un domaine de recherche actif pour déterminer quelle devrait être la bonne conjecture en ce qui concerne la durée moyenne ou prévue. On suppose qu'il est lié, d'une manière ou d'une autre, au volume du polytope de Newton de l'idéal sous-jacent.
la source
L' isomorphisme des graphes est un exemple remarquable et peu reconnu de ce phénomène . Le meilleur algorithme connu prend quelque chose comme le temps , mais l'isomorphisme des graphes a tendance à être résolu assez rapidement dans la pratique.O(2((nlogn)√))
Je ne sais pas s'il y a un résultat formel sur la complexité moyenne / lissée du problème, mais je me souviens de l'avoir lu: un autre peut peut-être aider à signaler un résultat formel. Certes, il existe de nombreuses preuves expérimentales et beaucoup de solutions rapides. Je suis également curieux de savoir si cette propriété s'étend à d'autres membres de la famille GI-complete.
la source
D'après David Johnson, une différence entre les ratios d'approximation théorique et expérimental: Le problème du voyageur de commerce: une étude de cas en optimisation locale, DS Johnson et LA McGeoch . Dans cet article, ils présentent des preuves expérimentales d'asymptotiques (puisque les expériences atteignent la taille N = 10 000 000!) Qui défient les asymptotiques théoriques: l'algorithme "Greedy" ou "Multi-Fragment" de Jon Bentley (rapport d'approximation dans le pire des cas au moins logN / loglogN) bat le plus proche Insertion et le double MST, qui ont tous deux un rapport d'approximation dans le cas le plus défavorable de 2.
la source
Un autre exemple qui n'a pas été bien compris jusqu'à récemment est le temps d'exécution de l'algorithme k-means de Lloyd , qui (du point de vue pratique) est l'algorithme de choix pour la classification depuis plus de 50 ans. Ce n'est que récemment que, en 2009, il a été prouvé (par Vattani ) que, dans le pire des cas, l'algorithme de Lloyd nécessitait un nombre d'itérations exponentiel par rapport au nombre de points d'entrée. D'autre part, une analyse lissée (d' Arthur, Manthey et Röglin ) a également montré que le nombre d'itérations lissées est simplement polynomial, ce qui explique la performance empirique.
la source
Les corollaires de traversal, deque et de split de la conjecture d'optimalité dynamique pour les arbres évasés sont des exemples de telles lacunes. Les expériences sauvegardent l'allégation de temps linéaire, mais il n'y a pas de preuve connue.
la source
Il y a un léger problème avec la question. Il existe en fait plus de deux manières d’analyser un algorithme, et l’une des méthodes théoriques négligées est la durée d’exécution attendue, et non la pire des exécutions. C'est vraiment ce comportement de cas moyen qui est pertinent pour faire des expériences. Voici un exemple très simple: Imaginons que vous disposiez d’un algorithme pour une entrée de taille n, qui prend un temps n pour chaque entrée possible de taille n, à l’exception d’une entrée spécifique de chaque longueur qui prend un temps de 2 ^ n. Écoutez, le temps d'exécution le plus défavorable est exponentiel, mais le cas moyen est [(2 ^ n -1) n + (2 ^ n) 1] / (2 ^ n) = n - (n-1) / 2 ^ n qui limites à n. Il est clair que les deux types d'analyse donnent des réponses très différentes, mais il faut s'y attendre, car nous calculons des quantités différentes.
En exécutant l'expérience plusieurs fois, même si nous prenons le temps d'exécution le plus long pour l'échantillon, nous n'échantillons qu'une petite partie de l'espace des entrées possibles. Par conséquent, si les instances matérielles sont rares, nous risquons de les manquer. .
Il est relativement facile de construire un tel problème: si les n / 2 premiers bits sont tous nuls, résoudre l'instance 3SAT codée avec les n / 2 derniers bits. Sinon, rejette. Au fur et à mesure que n s'agrandit, le problème a à peu près le même temps d'exécution dans le pire des cas que l'algorithme le plus efficace pour 3SAT, où le temps d'exécution moyen est garanti comme étant très faible.
la source
Il est prouvé que l'inférence de type Damas-Milner est complète pour le temps exponentiel, et il existe des cas faciles à construire avec une explosion exponentielle de la taille d'un résultat. Néanmoins, sur la plupart des entrées du monde réel, il se comporte de manière réellement linéaire.
la source
Le PTAS for Steiner tree dans les graphes planaires a une dépendance ridicule à epsilon. Cependant, une mise en œuvre montre une performance étonnamment bonne dans la pratique.
la source
Couplage de tas, depuis [1] - ils implémentent des tas, où insertion et fusion ont une complexité amortie de O (log n), mais sont supposés être O (1). En pratique, ils sont extrêmement efficaces, en particulier pour les utilisateurs de la fusion.
Je viens juste de les découvrir aujourd'hui en lisant Sec. 5.5 du livre de C. Okasaki "Des structures de données purement fonctionnelles", j'ai donc pensé partager des informations à leur sujet.
[1] Fredman, ML, Sedgewick, R., Sleator, DD et Tarjan, RE 1986. Le tas d'appariement: une nouvelle forme de tas auto-ajustable. Algorithmica 1, 1 (janvier 1986), 111-129. DOI = http://dx.doi.org/10.1007/BF01840439
la source
En rapport avec la remarque de Ilyaraz sur les branches et les liens, Pataki et al. montrer que la réduction de base de branche et liée plus réseau peut résoudre presque toutes les IP aléatoires en temps réel.
la source
L'heuristique de Lin-Kernighan pour le TSP ("Une heuristique efficace pour le problème du vendeur itinérant", Operations Research 21: 489-516, 1973) est très efficace dans la pratique, mais il lui manque encore une analyse moyenne ou lissée pour en expliquer les performances. . En revanche, Matthias Englert, Heiko Röglin et Berthold Vöcking (Algorithmica, à paraître) ont analysé de manière lissée l'heuristique à double opt pour le TSP.
la source
Il y a beaucoup de très rapide et efficace dans la pratique branche et liée algorithmes pour différents problèmes NP-difficiles que nous ne pouvons pas analyser rigoureusement: TSP, arbre de Steiner, emballage bin et ainsi de suite.
En outre, il existe de très bons algorithmes pour max-flow qui sont pratiquement linéaires, mais seules les limites ont été prouvées.Ω(nm)
la source