Esiste un concetto per un algoritmo che calcola una funzione trovando prima un altro algoritmo?


14

Se lo capisco correttamente, un algoritmo che calcola il valore di una funzione reale ha complessità computazionale O ( g ( n ) ) se vale quanto segue: Quando calcoliamo f con precisione δ richiede nell'ordine dei passaggi g ( n ) .fO(g(n))fδg(n)

Tuttavia, se avessimo un algoritmo che prima "trova un algoritmo più efficiente per calcolare " e poi calcola f ?ff

In altre parole, se avessimo un algoritmo che procede come segue:A

  1. Trova un algoritmo efficiente B per il calcolo .f

  2. usa B per calcolare .f

In tal caso, non possiamo più parlare di tempo di calcolo che ci vuole per calcolare , per esempio, perché dipende completamente dal fatto che l'algoritmo A ha già trovato l'algoritmo B . In altre parole, il tempo di calcolo richiesto per calcolare f ( 5 ) se 5 è il primo numero associato è di gran lunga maggiore del tempo di calcolo richiesto per calcolare f ( 5 ) dopo che f ( 3 ) è già stato calcolato.f(5)ABf(5)5f(5)f(3)

La mia domanda è: esiste un concetto / teoria su questo tipo di algoritmo che trova prima un altro algoritmo prima di calcolare una funzione? In particolare, mi chiedo di analizzare la complessità computazionale di tali algoritmi.


1
Diresti che Mathematica sostanzialmente fa quello che stai chiedendo? Gli dai le equazioni da risolvere e capisce automaticamente quale algoritmo usare per risolvere quelle equazioni, quindi le risolve.
user541686

Dai un'occhiata a itu.dk/people/sestoft/pebook , è rilevante.
Nathan Ringo,

Risposte:


18

Esiste un noto algoritmo, l'algoritmo di ricerca universale di Levin, la cui modalità di funzionamento è identica. Si consideri ad esempio il problema di trovare un incarico soddisfacente per una formula che è garantita essere soddisfacente. La ricerca universale di Levin esegue tutti i potenziali algoritmi in parallelo e, se un algoritmo emette un compito soddisfacente, interrompe e genera questo compito. Se l'algoritmo ottimale per il problema viene eseguito nel tempo , l'algoritmo di Levin viene eseguito nel tempo O ( f ( n ) ) (con una costante possibilmente enorme) se implementato correttamente.f(n)O(f(n))

Mentre l'algoritmo di Levin è poco pratico (a causa delle enormi costanti coinvolte), è teoricamente molto interessante. Vedi l' articolo di Scholarpedia per ulteriori informazioni sulla ricerca universale.


10

Supponiamo di avere una funzione fche accetta un argomento xdi tipo Ae genera un'altra funzione che accetta un argomento ydi tipo Be restituisce un risultato di tipo C. In parole tue, faccetta un argomento xe restituisce un "algoritmo" che accetta input di tipo Be genera risultati di tipo C.

La funzione fha il tipo

A → (B → C)

In effetti, prende x : Ae restituisce una funzione di tipo B → C. Ma un tale fequivale a una funzione g : A × B → Cche accetta entrambi x e ycontemporaneamente e ti dà il risultato finale. In effetti, c'è un isomorfismo tra i tipi

A → (B → C)

e

A × B → C

perché possiamo definire gin termini di fcome

g(x, y) := f(x)(y)

e possiamo definire fin termini di gcome

f(x) := (y ↦ g(x,y))

L'operazione di passaggio da ga fsi chiama curry e i programmatori funzionali la usano sempre. Nella teoria della computabilità l'idea di prendere un input e produrre una funzione (algoritmo) è incorporata nel teorema smn .

La risposta alla tua domanda è "sì, la gente lo fa sempre". Ma c'è anche una morale: un algoritmo che trova un algoritmo è ancora solo un algoritmo.


1
+1 per l'ultima frase. Ben detto.
John Coleman,

f(5)c+ccf(5)f(5)c1+c2c1c2c1>c2

@ Programmer2134 sarebbe l'ottimizzazione del compilatore il concetto che ti interessa? Non sono affatto sicuro della teoria alla base di questo (in particolare le sue interazioni con la teoria della complessità), ma questo potrebbe essere un potenziale esempio
Mark

La parola d'ordine da cercare è "valutazione parziale".
Andrej Bauer
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.