Exemple d'un algorithme où un terme de faible ordre domine le runtime pour toute entrée pratique?


10

La notation Big-O cache des facteurs constants, il existe donc certains algorithmes qui sont impossibles pour toute taille d'entrée raisonnable car le coefficient sur le terme est si énorme.O(n)n

Existe-t-il des algorithmes connus dont le temps d'exécution est mais avec un terme ordre inférieur qui est si énorme que pour des tailles d'entrée raisonnables, il domine complètement le temps d'exécution? Je voudrais utiliser un algorithme comme celui-ci et un exemple dans un cours d'algorithmes, car cela donne une bonne raison pour laquelle la notation big-O n'est pas tout.o ( f ( n ) )O(f(n))o(f(n))

Merci!


Des algorithmes qui établissent d'abord une grande table puis effectuent des recherches rapides dans la table pour chaque élément d'entrée? Si la table est suffisamment grande, le nombre d'éléments doit être énorme pour compenser le coût de création de la table. Les moteurs de recherche en sont un exemple, si est le nombre de requêtes. n
András Salamon

J'ai entendu dire que la programmation linéaire était comme ça. Le simplexe est exponentiel mais plus rapide que les algorithmes polynomiaux en pratique.
jmite

1
Je ne connais aucun algorithme qui répondrait à vos besoins, mais je chercherais quelque chose qui a au plus un temps de fonctionnement linéaire, car au-delà de cela, je doute fort que les termes plus petits puissent dominer le terme principal pour les entrées les plus raisonnables. Mais peut-être que k-way mergesort convient à vos besoins, lorsqu'il est utilisé pour trier les mégadonnées? Le problème est de minimiser les accès à la mémoire secondaire car ceux-ci coûtent énormément de temps - bien que je ne sois pas tout à fait sûr que ce serait un exemple approprié pour ce que vous voulez démontrer, et je ne pense pas vraiment que ce soit assez simple pour être illustratif.
G. Bach

quelque peu similaire à des algorithmes puissants trop complexes à implémenter , voir également le blog de rjlipton sur les algorithmes galactiques
vzn

Réponses:


2

La cryptographie est un exemple, si elle est dégénérée. Par exemple, briser le cryptage AES est - tout ce que vous avez à faire est de trouver la bonne clé parmi un nombre fini, 2 128 ou 2 192 ouO(1)21282192 en fonction de la tailleclé (supposant que suffisamment de texte brut est connu déterminer la clé sans ambiguïté). Cependant, même 2 128 opérations nécessiteraient tous les ordinateurs aujourd'hui (un milliard ou environ, faisant chacun environ un milliard d'opérations par seconde) plus que la durée de vie de l'univers (environ un milliard de milliards de secondes).22562128


Une manière légèrement différente d'illustrer pourquoi le big-O n'est pas tout est de remarquer que nous utilisons parfois un algorithme différent pour les petites tailles d'entrée. Par exemple, prenez quicksort. Avec le bon choix de pivot (ce qui est une affaire délicate!), C'est . Quicksort fonctionne par division et conquête: chaque instance implique de faire beaucoup de tri de petits tableaux. Pour les petits tableaux, les méthodes quadratiques telles que le tri par insertion fonctionnent mieux. Ainsi, pour de meilleures performances, un tri rapide d'un grand tableau implique de nombreuses exécutions de tri par insertion pour les petites tailles.O(nlgn)


Je ne pense pas que la rupture du cryptage soit un exemple raisonnable ici; une chose est que pour analyser asymptotiquement le problème de trouver la bonne clé, il faudrait considérer les versions théoriquement disponibles de Rijndael avec une taille de clé non constante, c'est-à-dire casser la clé pour des clés de taille . Sinon, nous pourrions tout aussi bien dire que tout algorithme qui se termine fonctionne en O ( 1 ) pour une entrée de taille fixe. nO(1)
G. Bach

@ G.Bach Le point de cet exemple est qu'il est irréalisable (que la théorie de la complexité associe à une complexité élevée) même s'il est à temps constant (en termes de taille du texte chiffré).
Gilles 'SO- arrête d'être méchant'

2
Je ne pense pas que votre premier exemple fonctionne. Puisqu'il n'y a qu'un nombre infini d'options à vérifier, le temps d'exécution de l'algorithme est , donc il n'y a pas de terme o ( 1 ) de faible poids qui représente le temps d'exécution complet. O(1)o(1)
templatetypedef

1
@templatetypedef Briser le cryptage d'un message crypté AES est en termes de longueur du message . O(1)
Gilles 'SO- arrête d'être méchant'

1

Deux exemples me viennent à l'esprit du domaine de la complexité paramétrée et des algorithmes FPT. Ce n'est peut-être pas exactement ce que vous recherchez, mais voici.

Considérons un problème de graphique, tel que 3-COLORING ou HAM-CYCLE. Les deux problèmes peuvent être exprimés en logique monadique du second ordre, et peuvent donc être décidés en temps linéaire de graphiques avec une largeur d'arbre bornée. C'est le résultat de Bruno Courcelle , mais l'algorithme qui en résulte est loin d'être pratique.

O(p9p/2)LO(p2pL)pL


2
O(n)o(n)

0

quelque peu liés à votre question sont des algorithmes qui sont connus pour avoir de bonnes performances théoriquement mais qui ne sont pas utilisés sur des problèmes réels en raison de l'impraticabilité sur des instances plus petites. en d'autres termes, comme vous le demandez, la "performance annoncée" n'est possible qu'en théorie pour de grandes entrées, ce qui n'est pas le cas dans les applications pratiques. cela se reflète parfois dans les estimations Big-Oh, d'autres fois pas exactement. certains algorithmes ont de bonnes "performances" théoriques mais sont très logiquement complexes et n'ont jamais été implémentés par qui que ce soit, et donc les "performances" sur les tailles d'instances pratiques ne sont même pas connues, par exemple avec le problème de débit maximal .


Mais sont-ils impraticables parce que les termes d'ordre inférieur dominent ou parce que les constantes des termes d'ordre élevé sont mauvaises?
David Richerby

soit, soit une combinaison, il serait difficile d'isoler dans chaque cas. effectivement / pratiquement son le même effet.
vzn

-1

C'est une blague mais ça a un côté sérieux ...

O(nlogn)O(n2)


1
Non, c'est différent. Quicksort est utile dans la pratique car il n'y a pas de terme quadratique pour une entrée typique, quelle que soit la taille. Si le choix du pivot est mauvais pour une présentation de données, le tri rapide présente un comportement quadratique même pour une petite entrée.
Gilles 'SO- arrête d'être méchant'
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.