Voici quelques façons d'analyser le temps d'exécution d'un algorithme:
1) Analyse du pire des cas: temps d'exécution sur la pire instance.
2) Analyse de cas moyen: temps d'exécution prévu sur une instance aléatoire.
3) Analyse amortie: durée moyenne d'exécution sur la pire séquence d'instances.
4) Analyse lissée: temps d'exécution prévu sur la pire instance perturbée de manière aléatoire.
5) Analyse de cas générique: temps d'exécution sur le pire de tous sauf un petit sous-ensemble d'instances.
Ma question: est-ce une liste complète?
ds.algorithms
umar
la source
la source
Réponses:
L'optimalité d'instance est une propriété très intéressante des algorithmes. On peut généraliser les notions d'optimalité d'instance et proposer des notions étonnamment intéressantes qui incluent l'analyse du pire et du cas moyen.
Bien qu'il ne relève pas strictement de l'analyse traditionnelle des algorithmes, il est intéressant en soi. L'idée dans un article par Afshani-Barbay-Chan (FOCS '09) qui discute d'un algorithme géométrique considère les performances de l'algorithme inconscient de l'ordre d'entrée (qui est pertinent pour leur problème particulier).
Cela peut être vu comme généralisant comme suit: Pour chaque partition d'algorithme, les entrées en classes d'équivalence et considèrent les performances de l'algorithme comme une sorte de statistique collective sur les performances moyennes pour chacune de ces classes d'équivalence.
L'analyse du pire des cas considère simplement l'entrée comme des classes d'équivalence individuelles et calcule le temps de fonctionnement maximal. L'analyse de cas moyenne examine la classe d'équivalence triviale qui est une classe unique comprenant toutes les entrées. Dans l'article Afshani-Barbay-Chan, leur algorithme est optimal si l'entrée est partitionnée en classes de permutations (c.-à-d. Ordonner des performances inconscientes).
Il n'est pas clair si cela conduit à de nouveaux paradigmes d'analyse d'algorithmes. Le cours de Tim Roughgarden contient d'excellents exemples motivants et couvre différentes méthodes d'analyse des algorithmes.
la source
J'en ai deux autres pour la liste, qui sont quelque peu similaires.
la source
Elle ressemble à l'analyse paramétrisée pour les algorithmes à temps polynomial, et il semble que l'analyse sensible à la sortie tombe dans cette catégorie.
la source
Il existe également une analyse "à haute probabilité " (pour les algorithmes randomisés), où, pour une instance donnée, vous vous inquiétez de la performance de votre algorithme la plupart du temps, mais vous pouvez abandonner complètement une petite fraction du temps. Ceci est courant dans la théorie de l'apprentissage.
la source
Vous pouvez ajouter un caractère aléatoire à votre algorithme et le combiner avec tout ce qui précède. Ensuite, vous obtiendrez, par exemple, le temps d'exécution prévu dans le pire des cas (instance dans le pire des cas, mais en moyenne sur toutes les séquences possibles de retournements de pièces aléatoires dans l'algorithme) et le temps d'exécution dans le pire des cas avec une probabilité élevée (encore une fois, dans le pire des cas, mais la probabilité sur la pièce aléatoire bascule dans l'algorithme).
la source
L'analyse bijective est un moyen de comparer deux algorithmes (Spyros Angelopoulos, Pascal Schweitzer: paging et list update under bijective analysis. J. ACM 60, 2013): En gros, l'algorithme A est meilleur que l'algorithme B sur les entrées de longueur n s'il y a un bijection f des entrées de longueur n telle que A fonctionne sur l'entrée x au moins aussi bien que B sur f (x).
la source
Analyse compétitive
Utilisé pour comparer les algorithmes en ligne avec les algorithmes de performance hors ligne. Voir la page wikipedia . Le problème de mise à jour de liste est un exemple classique.
la source
Analyse concurrentielle Dans l' algorithme de remplacement de page , une méthode surpondère l'autre par moins de pages manquantes. Moins de page manquante illustre "moins de temps d'exécution". En outre, l'analyse concurrentielle est une méthode pour comparer relativement deux méthodes. Un bon ouvrage de référence est "CALCUL EN LIGNE ET ANALYSE CONCURRENTIELLE" d'Allan Borodin.
la source