Existe-t-il une méthode pour une analyse automatique d'exécution des algorithmes?


10

Je me demande, existe-t-il une méthode d'analyse automatique de l'exécution qui fonctionne au moins sur un sous-ensemble pertinent d'algorithmes (algorithmes pouvant être analysés)?

Je googlé « Analyse de l' algorithme automatique » qui m'a donné ce mais il est MATHY aussi. Je veux juste un exemple simple en pseudo-code que je peux comprendre. Peut-être trop précis, mais je pensais que ça valait le coup.


Je n'arrive pas à voir comment le stress entre "tout" et "an" clarifie ce que vous recherchez vraiment. Si une procédure de décision est liée à un algorithme particulier B, alors il n'y a pas de véritable entrée et la réponse est toujours la même. Je pense que ce que vous voulez demander, c'est si «n'importe quel algorithme dans une classe d'algorithmes» où la classe est liée / connue. (modifier: cela a également été souligné le commentaire de mon mhum).
Nicholas Mancuso

2
L'ambiguïté dans votre utilisation de "an" et "any" est exactement la raison pour laquelle les quantificateurs ont été inventés.
Nate Eldredge

2
J'ai édité la question pour me concentrer sur les parties pertinentes. Notez comment j'utilise exactement zéro mathématique pour exprimer le problème avec précision (dans la mesure où vous avez spécifié votre question jusqu'à présent) et succinctement. Maintenant, la question est encore mal posée: bien sûr, il existe de tels algorithmes. Par exemple, il existe un algorithme simple qui analyse tous les algorithmes de la classe (très pertinente) d'algorithmes qui s'exécutent dans le temps . Par conséquent, vous devez clairement mettre des restrictions sur les ensembles d'entrées. (Notez qu'il pourrait ne pas y avoir "un exemple simple en pseudo-code que je peux comprendre".)Θ(nlogn)
Raphael

Réponses:


12

L' outil COSTA fait exactement cela, bien qu'il échoue dans de nombreux cas, comme vous pouvez l'imaginer, en raison de problèmes de calculabilité . Il existe de nombreux articles à ce sujet; L'analyse des coûts du bytecode Java par E. Albert, P. Arenas, S. Genaim, G. Puebla, D. Zanardini est un bon point de départ.

L'approche adoptée consiste à déduire une récurrence d'exécution à partir du code Javabyte, puis à la convertir en un formulaire fermé. L'outil calcule également les limites d'utilisation de l'espace.


8
@Nathvi Je peux comprendre que vous soyez irrité par certains commentaires, qui, je le reconnais, n'étaient pas vraiment nécessaires, mais vous devez également faire attention de ne pas utiliser le terme de "radotage pédant" pour le travail de scientifiques très réputés (et d'ailleurs ma réponse). Vous avez le droit de ne pas aimer les mathématiques, mais il est peu probable que vous alliez très loin sans cela, et les mots désobligeants gratuits n’aident personne.
babou

12

Aucun algorithme ne peut décider si un algorithme donné s'arrête ou non, donc en particulier aucun algorithme ne peut analyser de manière précise la complexité d'un algorithme donné.


2
Ma question ne concerne pas un algorithme entré arbitrairement, qui, s'il l'était, votre réponse serait correcte, en raison du problème d'arrêt. Vous auriez raison si ma question était libellée: "Existe-t-il un algorithme A qui prend n'importe quel algorithme B, puis génère la complexité temporelle de l'algorithme B?"
Nathvi

6
Si l'algorithme B est fixe, alors il y a bien un algorithme A. Il suffit d'avoir un algorithme qui ne fait qu'imprimer "O (n)" ou n'importe quelle mesure de complexité correspondant à B. S'il n'y a qu'une seule entrée possible pour l'algorithme A, alors nous n'avons besoin que d'une sortie.
mhum

5
@Nathvi, ce n'était pas clair pour moi non plus - j'ai également compris la question comme "existe-t-il un algorithme pour trouver la complexité de tout autre algorithme", et je ne comprends toujours pas votre vraie question. Si vous aimez compter les votes positifs, apparemment> 2 personnes l'ont interprété de cette façon. En cas de confusion, c'est vraiment une bonne idée de modifier votre question, sinon seules les personnes qui liront cette conversation (plutôt que tous ceux qui liront la question) comprendront ce que vous demandez et donneront de bonnes réponses. On dirait que vous pensiez que la réponse de DW était hostile - FWIW, je ne pense pas que cela devait être ..
jkff

6
@ignis La réponse est peut-être incomplète mais la phrase que Yuval a écrite est absolument correcte. Et le problème de l'arrêt n'est pas un cas secondaire exotique: c'est l'essence même du calcul.
David Richerby

3
@nikie Cela n'aide pas tant que cette question va; les limites d'exécution sont indécidables même sur l'ensemble de tous les algorithmes se terminant toujours.
Raphael

9

Je connais une approche de l'analyse de cas moyenne (semi-) automatisée, à savoir MaLiJAn ¹. Il ressemble étroitement au type d'analyse que Knuth utilise dans TAoCP. L'idée centrale est de

  • modéliser le programme (flux) comme chaîne de Markov,
  • n
  • n
  • utiliser l'algèbre informatique pour dériver le coût moyen (par rapport à ces fonctions).

Notez que seules les mesures de coût additives (par exemple, les comparaisons, le "temps") fonctionnent et que seule la valeur attendue est exacte (en supposant des fonctions de probabilité parfaites), des moments plus élevés ne peuvent pas être dérivés.

Toutes les étapes, à l'exception de l'extrapolation, sont rigoureuses [2] et il a été démontré que la méthode reproduit des résultats bien connus avec une grande précision - avec des entrées d'échantillons aléatoires appropriées, bien sûr. S'il n'y a pas de preuve ni même de garantie d'approximation sur les résultats (l'étape d'extrapolation est jusqu'à présent purement heuristique) les résultats obtenus avec l'outil permettent bien d'expérimenter des algorithmes difficiles à analyser et de formuler des hypothèses [3,4].


  1. Divulgation complète: je faisais partie de ce groupe de recherche et j'avais participé au développement de l'outil.
  2. Analyse de maximum de vraisemblance des algorithmes et des structures de données par U. Laube et M. Nebel (2010) [ préimpression ]
  3. Ingénierie Quicksort Dual Pivot de Java 7 à l'aide de MaLiJAn par S. Wild et al (2012) [ préimpression ]
  4. Analyse de maximum de vraisemblance de la méthode Ford – Fulkerson sur des graphiques spéciaux par U. Laube et M. Nebel (2015) [ préimpression ]

Ces techniques sont-elles accompagnées d'une estimation de la précision de l'analyse de cas moyenne?
Martin Berger

@MartinBerger Malheureusement, non. Nous avons quelques idées à ce sujet, mais rien ne s'est solidifié et encore moins mis en œuvre. Notez qu'il est facile de tromper n'importe quelle méthode qui ne vérifie que de nombreuses tailles d'entrée, il y a donc peu d'espoir en général. Avec des hypothèses sur les fonctions d'exécution et / ou les ensembles de données, quelque chose peut être possible. L'outil devrait au moins être capable de dire "besoin de plus de données".
Raphael

C'est intéressant. J'espère que vous vous déplacerez à faire ce travail supplémentaire.
Martin Berger

8

Bien sûr, comme l'a noté Yuval Filmus, il ne faut pas s'attendre à une solution générale à ces problèmes. Mais comme c'est généralement le cas, des solutions peuvent être trouvées pour des sous-ensembles intéressants du cas général.

Je ne suis en aucun cas un expert, ni même des connaissances significatives dans ce domaine, car il se trouve que je connais des travaux de ce genre. Il s'agit de l'analyse automatique de la complexité moyenne, et le travail a été réalisé par Philippe Flajolet et ses collègues.

λυ´ω

Un article que j'ai trouvé sur le Web est un article de 1990: Analyse automatique des cas moyens d'algorithmes par Philippe Flajolet, Paul Zimmermann et Bruno Salvy .

Je m'attendrais à ce que des articles ultérieurs aient étendu ce travail, mais je ne sais pas vraiment. Le travail a été assez abondamment cité et sa recherche sur le Web devrait produire des travaux plus récents sur le même sujet.

Maintenant, j'ai peur que le travail de Flajolet et de ses collègues soit très mathématique, et je ne m'attendrais pas à une lecture facile.

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.