Esiste un metodo per l'analisi automatica del runtime degli algoritmi?


10

Mi chiedo, esiste un metodo per l'analisi automatica del runtime che funziona almeno su un sottoinsieme rilevante di algoritmi (algoritmi che possono essere analizzati)?

Ho cercato su Google "Analisi algoritmica automatica" che mi ha dato questo, ma è troppo complicato. Voglio solo un semplice esempio in psuedocode che posso capire. Potrebbe essere troppo specifico, ma ho pensato che valesse la pena provare.


Non riesco a vedere come lo stress tra "qualsiasi" e "an" chiarisca ciò che realmente stai cercando. Se una qualche procedura di decisione è legata a un particolare algoritmo B, allora non vi è alcun input reale e la risposta è sempre la stessa. Penso che ciò che si desidera chiedere è se "qualsiasi algoritmo all'interno di una classe di algoritmi" in cui la classe è associata / nota. (modifica: questo è stato sottolineato anche il commento di mio mamma).
Nicholas Mancuso,

2
L'ambiguità nell'uso di "an" e "any" è esattamente il motivo per cui sono stati inventati i quantificatori .
Nate Eldredge,

2
Θ(nlogn)

Risposte:


12

Lo strumento COSTA fa proprio questo, anche se in molti casi fallisce, come puoi immaginare, a causa di problemi di calcolabilità . Ci sono molti articoli su questo; L'analisi dei costi del bytecode Java di E. Albert, P. Arenas, S. Genaim, G. Puebla, D. Zanardini è un buon punto di partenza.

L'approccio adottato è quello di dedurre una ricorrenza in fase di esecuzione dal codice Javabyte, convertendolo in un modulo chiuso. Lo strumento calcola anche i limiti di utilizzo dello spazio.


8
@Nathvi Posso capire che sei irritato da alcuni commenti, che concordo sul fatto che non erano davvero necessari, ma dovresti anche stare attento a non usare il termine "orientamento pedante" per il lavoro di scienziati di grande reputazione (e per inciso la mia risposta). Hai il diritto di non apprezzare la matematica, ma è improbabile che tu vada molto lontano senza di essa, e le parole sprezzanti gratuite non aiutano nessuno.
babou,

12

Nessun algoritmo può decidere se un determinato algoritmo si arresta o meno, quindi in particolare nessun algoritmo può analizzare strettamente la complessità di un determinato algoritmo.


2
La mia domanda non riguarda un algoritmo immesso arbitrario, che se fosse, allora la tua risposta sarebbe corretta, a causa del problema di arresto. Sarebbe corretto se la mia domanda fosse formulata: "Esiste un algoritmo A che accetta qualsiasi algoritmo B e quindi genera la complessità temporale dell'algoritmo B?"
Nathvi,

6
Se l'algoritmo B è fisso, allora assicurati che esista un algoritmo A. È sufficiente avere un algoritmo che non fa altro che stampare "O (n)" o qualunque misura di complessità corrisponda a B. Se c'è solo un possibile input per l'algoritmo A, allora abbiamo solo bisogno di un output.
mhum,

5
@Nathvi, inoltre, non era chiaro per me - ho anche capito la domanda come "esiste un algoritmo per trovare la complessità di qualsiasi altro algoritmo", e ancora non capisco la tua vera domanda. Se stai contando i voti positivi, apparentemente> 2 persone lo hanno interpretato in quel modo. In caso di confusione, è davvero una buona idea modificare la tua domanda, altrimenti solo le persone che leggono questa conversazione (anziché tutte le persone che leggono la domanda) capiranno quello che stai chiedendo e daranno buone risposte. Sembra che tu abbia sentito la risposta di DW ostile - FWIW, non credo che fosse destinato a essere ...
jkff

6
@ignis La risposta potrebbe essere incompleta ma la frase che Yuval ha scritto è assolutamente corretta. E il problema dell'arresto non è un caso secondario esotico: è l'essenza stessa del calcolo.
David Richerby,

3
@nikie Questo non aiuta per quanto riguarda questa domanda; i limiti di runtime sono indecidibili anche sul set di tutti gli algoritmi che terminano sempre.
Raffaello

9

Conosco un approccio all'analisi di casi medi (semi) automatizzati, vale a dire MaLiJAn ¹. Assomiglia molto al tipo di analisi che Knuth utilizza in TAoCP. L'idea di base è

  • modella il programma (flusso) come Markov Chain,
  • n
  • n
  • utilizzare l'algebra del computer per ricavare il costo medio (rispetto a queste funzioni).

Si noti che funzionano solo le misure di costo additivo (ad es. Confronti, "tempo") e solo il valore atteso è accurato (presupponendo funzioni di probabilità perfette), non è possibile derivare momenti più elevati.

Tutti i passaggi, tranne l'estrapolazione, sono rigorosi [2] e il metodo ha dimostrato di riprodurre risultati noti con elevata precisione - dati gli opportuni input casuali del campione, ovviamente. Sebbene non vi siano prove o garanzie di approssimazione sui risultati (la fase di estrapolazione è finora puramente euristica), i risultati ottenuti con lo strumento servono bene a sperimentare algoritmi difficili da analizzare e formulare ipotesi [3,4].


  1. Informativa completa: sono stato membro di questo gruppo di ricerca ed ero stato coinvolto nello sviluppo dello strumento.
  2. Analisi della massima verosimiglianza di algoritmi e strutture dati di U. Laube e M. Nebel (2010) [ prestampa ]
  3. Engineering Quicksort Dual Pivot di Java 7 con MaLiJAn di S. Wild et al (2012) [ prestampa ]
  4. Analisi della massima verosimiglianza del metodo Ford – Fulkerson su grafici speciali di U. Laube e M. Nebel (2015) [ prestampa ]

Queste tecniche vengono fornite con una stima della precisione dell'analisi media dei casi?
Martin Berger,

@MartinBerger Purtroppo no. Abbiamo alcune idee a riguardo, ma nulla di solidificato e tanto meno implementato ancora. Si noti che è facile ingannare qualsiasi metodo che controlla solo finitamente molte dimensioni di input, quindi c'è poca speranza in generale. Con ipotesi sulle funzioni di runtime e / o set di dati, qualcosa potrebbe essere possibile. Lo strumento dovrebbe almeno essere in grado di dire "bisogno di più dati".
Raffaello

Interessante. Spero che ti aggiri facendo questo lavoro aggiuntivo.
Martin Berger,

8

Naturalmente, come osservato da Yuval Filmus, non ci si dovrebbe aspettare una soluzione generale a tali problemi. Ma come di solito è possibile trovare soluzioni per sottoinsiemi interessanti del caso generale.

Non sono in alcun modo esperto, o anche significativamente esperto in questo settore, per caso conosco qualche lavoro del genere. Si tratta dell'analisi automatica della complessità media e il lavoro è stato svolto da Philippe Flajolet e dai suoi colleghi.

λυ´ω

Un articolo che ho trovato sul web è un articolo del 1990: analisi automatica del caso medio di algoritmi di Philippe Flajolet, Paul Zimmermann e Bruno Salvy .

Mi aspetto che i lavori successivi abbiano esteso questo lavoro, ma non lo so davvero. Il lavoro è stato citato abbastanza pesantemente e la ricerca sul Web per esso dovrebbe produrre lavori più recenti sullo stesso argomento.

Temo che il lavoro di Flajolet e dei suoi colleghi sia stato molto matematico e non mi aspetterei una lettura molto facile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.