Algorithme déterministe simple et pratique, temps d'exécution compliqué


18

Très souvent, si le temps d'exécution d'un algorithme est une expression compliquée, l'algorithme lui-même est également compliqué et peu pratique. Chacune des racines de cube et facteurs log log n dans le temps d'exécution asymptotique tend à ajouter de la complexité à l'algorithme et également des facteurs constants cachés au temps d'exécution.JournalJournaln

Avons-nous des exemples frappants dans lesquels cette règle empirique échoue?

Bien sûr, il est facile de trouver des exemples d'algorithmes qui sont très difficiles à implémenter même s'ils ont un temps d'exécution très simple dans le pire des cas. Mais qu'en est-il de l'inverse?

Avons-nous des exemples d' algorithmes déterministes très simples et pratiques qui sont faciles à mettre en œuvre mais qui ont une expression très compliquée comme étant le temps d'exécution asymptotique le plus défavorable?

Veuillez noter les mots clés "déterministe" et "pire des cas"; l'analyse d' algorithmes aléatoires simples conduit assez facilement à des expressions compliquées.

Bien sûr, ce qui est "compliqué" est une question de goût. Quoi qu'il en soit, je préférerais voir une expression beaucoup trop moche pour mettre dans le titre de votre article. Et je préférerais une fonction compliquée d' un paramètre naturel (taille d'entrée, nombre de nœuds, etc.).


PS. Je pensais que je ne ferais pas de cette question une «grande liste», et non CW. J'aimerais trouver un seul excellent exemple (s'il existe). Par conséquent, veuillez publier une autre réponse uniquement si vous pensez qu'elle est "meilleure" que n'importe laquelle des réponses jusqu'à présent.


2
L'algorithme de test de primalité AKS peut-il être considéré comme une réponse? J'hésite car la "complexité" de son temps de fonctionnement est, dans un certain sens, le résultat de la pseudo-aléatoire de la distribution des nombres premiers ...
arnab

Mon sentiment est que le pire des cas est dans la plupart des cas quelque chose qui provoque "recouvre tout" et tout est la chose dans laquelle nous mesurons le temps d'exécution. Donc, naturellement, les algorithmes simples ont des temps d'exécution WC faciles. Des temps d'exécution compliqués apparaissent si nous essayons de nous raser un tout petit peu par une astuce. Mais votre question est intéressante; Je suis certainement curieux de voir si mon sentiment est bon.
Raphael

@arnab: Merci, AKS est une bonne idée. Mais je ne sais pas si nous pouvons l'appeler "pratique"?
Jukka Suomela

Les schémas de transmission de messages comme la propagation d'enquête, la propagation de contraintes ou le TRW séquentiel comptent-ils comme des «algorithmes»? Facile à implémenter, l'exécution est difficile à prévoir
Yaroslav Bulatov

Oups, j'aime toujours la méthode rho de Pollard, elle est simple et pratique, et l'analyse est vraiment difficile, mais le caractère aléatoire de l'algorithme le rend non qualifié comme réponse au message ...
Hsien-Chih Chang 張顯 之

Réponses:


20

Le meilleur exemple auquel je peux penser est un algorithme (décrit ci-dessous) pour calculer le niveau dans un arrangement de n lignes dans le plan, c'est-à-dire la ligne polygonale formée par les points qui ont exactementkn lignes verticalement au-dessus. Ce n'est pas l'algorithme le plus efficace connu pour le problème. Il existe des algorithmes plus efficaces avec des complexités plus simples, mais je crois que celui-ci est plus pratique que la plupart (sinon tous) d'entre eux. L'analyse n'est probablement pas serrée, car elle utilise lacomplexité de niveau k , qui est un problème ouvert célèbre (je pense que tous les autres termes de l'analyse sont serrés). Même encore, je doute que l'amélioration des limites pour k -level rendrait le temps d'exécution beaucoup plus simple. Je suppose que k =kkk pour écrire la complexité en fonction de n seul.k=n/2n

L'algorithme est basé sur le paradigme de balayage de ligne et utilise deux tournois cinétiques -ary comme files d'attente de priorité cinétique. Les insertions et les suppressions sont effectuées lorsqu'une ligne passe au-dessus ou en dessous du niveau k , déplaçant une ligne d'un tournoi cinétique à l'autre. Par conséquent, il y a O ( n 4 / 3 ) des insertions et des deletions ( à l' aide de la destination de Dey k complexité -level). Chaque événement est traité en O ( log n ) du temps et il y a O ( n quatre / trois α ( n(Journaln)kO(n4/3)kO(Journaln)provient de la hauteur d'un arbre ( log n ) -ary ). La durée totale de fonctionnement est événements (le α ( n ) provient de la complexité de l'enveloppe supérieure des dispositions des segments de ligne, tandis que le log n / log log nO(n4/3α(n)Journaln/JournalJournaln)α(n)Journaln/JournalJournaln(Journaln)

O(n4/3α(n)Journal2n/JournalJournaln).

Veuillez consulter le manuscrit de Timothy Chan http://www.cs.uwaterloo.ca/~tmchan/lev2d_7_7_99.ps.gz pour plus de détails et de références. Le facteur peut être supprimé à l'aide d'un binaire (au lieu de ( log n1/JournalJournalntournoi cinétique ) -ary), mais il accélère en fait la file d'attente de priorité cinétique dans les tests que j'ai effectués. La complexité devrait devenir un peu plus laide et pire (alors que l'algorithme sera toujours pratique) si un tas cinétique est utilisé à la place d'un tournoi cinétique (un journal à l' intérieur d'une racine carrée devrait apparaître).(Journaln)Journal


Excellent exemple, merci! Ce ne sera pas facile à battre. :)
Jukka Suomela

1
Cet algorithme est plus lent dans la pratique que les algorithmes randomisés, qui sont assez faciles à implémenter (comme quelqu'un qui a implémenté l'un de ces algorithmes (voir mon article "Se promener dans un arrangement plan").)
Sariel Har-Peled

J'ai accepté cette réponse car elle semble être la plus proche de ce que j'avais en tête. Mais si quelqu'un a de nouvelles idées, je serais heureux de l'entendre!
Jukka Suomela

24

Les opérations de structure de données union-find semblent répondre à vos critères:

http://en.wikipedia.org/wiki/Disjoint-set_data_structure


2
En effet, j'ai posté la même réponse mais je l'ai supprimée après avoir remarqué que vous m'aviez battu. :) Algorithme simple et élégant qu'un non-théoricien pourrait même découvrir, mais inverse Ackermann a amorti la complexité.
Warren Schudy

Eh bien, le temps ne semble pas que "compliqué" si on le compare à O ( n 4 / 3 α ( n ) log 2 n / log log n ) dans la réponse de Guilherme. :)O(α(n))O(n4/3α(n)Journal2n/JournalJournaln)
Jukka Suomela

Le rapport de la longueur de l'algorithme à la complexité de la preuve pour la recherche d'union est probablement imbattable - les trois opérations sont quoi, neuf lignes de code?
Neel Krishnaswami

1
Je ne pense pas que la question concerne un algorithme simple et pratique avec une analyse complexe . Je pense que la question concerne un algorithme simple et pratique avec un temps d'exécution complexe , c'est-à-dire l'expression réelle obtenue pour la borne supérieure.
Guilherme D. da Fonseca

6

Algorithme simplex. Facile à mettre en œuvre et fonctionne à merveille dans la pratique, mais est un gâchis à analyser théoriquement.


n

en fait, simplex est connu pour prendre un temps exponentiel dans le pire des cas via la construction de Klee-Minty. Ce n'est pas, je pense, un exemple de ce que Jukka demande
Suresh Venkat

1
J'aurais peut-être dû dire la méthode simplex plutôt que l'algorithme simplex. Le cube Klee-Minty et ses variations fonctionnent pour certaines règles de pivotement vanille. Mais, par exemple, la règle de pivotement de facettes aléatoires a une limite supérieure et une limite inférieure (récentes) folles. Gil Kalai avait une belle entrée de blog sur les résultats récents. gilkalai.wordpress.com/2010/11/09/…
Mohit Singh

bon point, Mohit. J'étais aussi confus.
Suresh Venkat

2

Je ne sais pas si vous considérez cela comme "pratique" mais c'est un fameux problème ouvert. Paul Erdos a déclaré à propos de la conjecture de Collatz: «Les mathématiques ne sont pas encore prêtes pour de tels problèmes»

X=1


Et quel est le problème résolu par cet algorithme ...?
Jukka Suomela

Il suggère de rechercher de nouvelles techniques d'analyse à l'exécution.
Mohammad Al-Turkistany

2
on pourrait alors dire qu'une recherche par force brute d'une preuve de la conjecture de Collatz motive également «de nouvelles techniques d'analyse à l'exécution»; dans les deux cas, l'algorithme explore simplement sans réfléchir un digraphe. La conjecture de Collatz est amusante, mais je ne pense pas que ce soit un exemple intéressant "d'un algorithme".
Niel de Beaudrap

2

Cet exemple, bien que ne répondant pas à la lettre de votre demande, peut être intéressant car il porte une certaine affinité spirituelle. Plus précisément, la question du tri des piles de crêpes et crêpes brûlées par retournements.

http://en.wikipedia.org/wiki/Pancake_sorting

Un domaine d'application est la biologie computationnelle (génétique) où les questions sur les réarrangements du génome peuvent être formulées en termes de distance entre les permutations en utilisant des inversions de morceaux de permutations soumises à diverses règles.

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.