Qu'est-ce qu'un algorithme efficace?

10

Du point de vue du comportement asymptotique, qu'est-ce qui est considéré comme un algorithme "efficace"? Quelle est la norme / raison de tracer la ligne à ce point? Personnellement, je penserais que tout ce que je pourrais naïvement appeler "sous-polynôme", tel que tel que serait efficace et tout ce qui est serait "inefficace". Cependant, j'ai entendu tout ce qui est de n'importe quel ordre polynomial être appelé efficace. Quel est le raisonnement?n 1 + ϵ Ω ( n 2 )f(n)=o(n2)n1+ϵΩ(n2)

Robert S. Barnes
la source

Réponses:

11

Cela dépend du contexte. En informatique théorique, chaque algorithme de temps polynomial est généralement considéré comme «efficace». Dans les algorithmes d'approximation par exemple, un temps d'exécution de serait considéré comme efficace, même s'il ne sera pas utilisable en pratique pour une valeur raisonnable de ϵ . Un algorithme pour SAT qui s'exécute en n 2 100 serait une percée étonnante.n1/ϵ1/ϵϵn2100

En algorithmique classique, c'est-à-dire les algorithmes des années 80 et avant, les temps d'exécution inférieurs à environ (pensez à la multiplication matricielle, à l'appariement des coûts min, aux flux, à la programmation linéaire) sont considérés comme efficaces. Ils sont toujours considérés comme efficaces par la plupart des gens, je dirais. Bien entendu, un algorithme n 2 n'est pas considéré comme efficace si un algorithme n log n est connu, comme pour le tri par exemple.n3n2nJournaln

De nos jours, il existe une tendance vers des algorithmes sublinéaires ou des algorithmes de streaming capables de traiter des téraoctets de données. Essayez d'utiliser la multiplication matricielle pour calculer le classement des pages de toutes les pages de l'index de Google. Ça ne marchera pas.

Bien sûr, bien que certainement utile, le temps d'exécution asymptotique d'un algorithme ne raconte pas toute l'histoire. Il existe des algorithmes qui ont un bon temps d'exécution asymptotique, mais des constantes si énormes qu'elles ne peuvent effectivement pas être utilisées. Déjà. Lipton les appelle des algorithmes galactiques . Robert Sedgewick déclare même que les limites du pire des cas sont "souvent inutiles pour la prédiction, souvent inutiles pour les garanties" et "l'analyse du pire des cas est inutile pour prédire les performances" dans son discours Remettre la science en informatique .

adrianN
la source
9
En bref: efficace est ce qui résout votre problème dans un délai qui vous convient.
Raphael
Cela ne nécessite pas vraiment sa propre réponse, mais BPP, qui est la classe de fonctions avec un runtime polynomial (comme décrit dans la réponse) avec un caractère aléatoire également, est souvent considéré comme efficace. En d'autres termes, ce qui précède est juste, mais les ordinateurs sont généralement autorisés à accéder au hasard pour effectuer des calculs. Le hachage est l'une des utilisations pratiques les plus importantes de l'aléatoire.
SamM
Peut-être que «efficace» n'est pas vraiment la bonne terminologie en premier lieu? Je revoyais juste un de mes livres de calcul, et l'auteur appelle les temps d'exécution polynomiaux "tractables" et les temps d'exécution exponentiels "intraitables".
Robert S.Barnes
1
@ RobertS.Barnes: Mots différents, même problème.
Raphael
4

Mes 2 cents sous l'angle des algorithmes distribués: Lorsque l'on regarde les réseaux à grande échelle (P2P, réseaux sociaux, etc.), un algorithme distribué est considéré comme efficace si son temps de fonctionnement est pour une constante c > 0 et l'algorithme utilise des messages de O ( log n ) bits. Il est à noter que l'exigence relative aux tailles de message est généralement donnée encore plus d'importance que le temps d'exécution, en particulier pour les problèmes "globaux" qui ont une limite inférieure plus grande sur le temps d'exécution, par exemple MST distribué.O(Journalcn)c>0 O(Journaln)

Peter
la source
3

Le raisonnement derrière est que, du point de vue du comportement asymptotique, un taux de croissance polynomial est trivialement inférieur à un taux de croissance super-polynomial. En pratique, un algorithme temporel polynomial s'exécute beaucoup plus rapidement qu'un algorithme temporel superpolynomial lorsque la taille d'entrée augmente.

O(n2000)O(n5)

O(n2)

Massimo Cafaro
la source
3

En théorie, un algorithme est dit efficace si son pire temps d'exécution est limité par un polynôme dans sa longueur d'entrée. Le raisonnement étant que les polynômes ont de belles propriétés de fermeture. L'ajout, la multiplication et la composition de polynômes sont des opérations qui produisent des polynômes et elles sont bonnes si vous réduisez les problèmes les uns aux autres.

Bien sûr, l'écart entre le polynôme et l'exponentielle devient très grand à mesure que la longueur d'entrée augmente, de sorte que les algorithmes polynomiaux sont bien meilleurs. En pratique, un algorithme à temps polynomial peut prendre beaucoup de temps avant la fin, mais il se peut que ce soit un algorithme optimal (le meilleur possible), auquel cas je dirais qu'il est efficace.

saadtaame
la source
Bien que je puisse comprendre que si quelque chose est l'algorithme connu le plus rapide pour un problème particulier, il pourrait être considéré comme "efficace" de ce point de vue, il est difficile pour moi de penser à tout ce qui fonctionne en polytime comme efficace. :-)
Robert S. Barnes
Pour les temps d'exécution polynomiaux, «efficace» n'est qu'un mot, et trompeur.
Raphael
@Raphael Peut-être que tractable est un meilleur mot à utiliser ...?
Robert S.Barnes
1
@ RobertS.Barnes: Pas beaucoup mieux, à mon humble avis. "Tractable" est tout aussi relatif qu'efficace.
Raphael
0

n3n2

gnasher729
la source
Θ