Esiste una teoria per rispondere "il programma più semplice per risolvere un problema"?


10

Per rispondere a "quali problemi possono essere risolti dal computer", abbiamo sviluppato la teoria della calcolabilità. Per i problemi calcolabili, esiste una teoria per rispondere alla domanda "è il programma che ottengo il più semplice"?

Non credo che la complessità computazionale risponda alla domanda. Penso che consideri il tempo necessario (sebbene misurato in modo astratto).

Non sono sicuro che la teoria dell'informazione algoritmica risponda alla domanda. Sembra che la teoria parli di dimensioni, dove l'equivalenza di dimensioni minime e semplici non è ovvia per me (beh, almeno si sentono diverse per me).

Penso che la teoria dovrebbe almeno definire una relazione "semplice" o "più semplice di".


Ora sono convinto che dovrei esaminare la complessità di Kolmogorov. Tuttavia, vorrei spiegare cosa avevo in mente quando stavo ponendo la domanda.

Quando perfeziono un programma, provo a ridurre le connessioni non necessarie tra le diverse parti del programma (magari ridistribuendo le parti in modo che possano esserci connessioni inferiori o più deboli). Poiché le connessioni sono ridotte, il programma sembra "più semplice". Da qui la scelta della parola "semplice" quando sto formulando la domanda. È molto probabile che anche la dimensione del programma diminuisca, ma questo è un buon effetto collaterale, non l'obiettivo principale. Ovviamente, il processo di miglioramento non può durare per sempre. C'è un punto che dovrei smettere. Se, solo considerando la "struttura" (scusate per un altro concetto indefinito) o "relazione", posso convincermi che non si può fare altro?

Qui contiene una migliore descrizione della mia nozione di complessità.

Olaf Sporns (2007) Complessità . Scholarpedia , 2 (10): 1623



4
Potresti essere interessato al concetto di profondità logica di Bennett. Li e Vitanyi hanno dedicato il capitolo 7.7 nel loro libro sulla complessità di Kolmogorov.
Martin Schwarz,

2
@YuNing: cosa intendi per "più semplice", se non per dimensione?
Rob

1
@Yu Ning: Che ne dici, piuttosto che il più semplice è il programma più piccolo per produrre un output, è la macchina di Turing con la migliore lunghezza di descrizione minima - in modo che ci sia un equilibrio tra 'piccolezza' e 'struttura'?
Ross Snider,

3
Penso che la domanda sia un po 'mal definita. Si noti inoltre che esistono algoritmi molto semplici, ma è difficile dimostrare che sono corretti. E ci sono algoritmi che sono semplici e chiaramente corretti, ma è difficile dimostrare che sono veloci.
Jukka Suomela,

Risposte:


16

Questo problema è studiato nella teoria dell'informazione algoritmica. Quello che stai definendo si chiama complessità Kolmogorov-Chaitin.

http://en.wikipedia.org/wiki/Kolmogorov_complexity

E sembra che la nozione di semplicità che stai richiedendo possa essere formalizzata attraverso la nozione di misura della complessità, che è formalizzata dagli assiomi di Blum.

http://en.wikipedia.org/wiki/Blum_axioms

Sembra anche che sia possibile generalizzare la complessità di Kolmogorov per prendere in considerazione altre misure di complessità. Vedi riferimento sotto. (L'articolo di Wikipedia sulla complessità di Kolmogorov affronta questo problema.)

Burgin1990- Complessità kolmogorov generalizzata e altre misure di doppia complessità Cibernetica e analisi dei sistemi Volume 26, Numero 4, 481-490


Come dice @Jukka Suomela, la domanda è un po 'mal definita. Quindi mi chiedo di riuscire a malapena a ottenere una risposta completa alla domanda. Tuttavia, poiché questa risposta è piuttosto istruttiva e colpisce una parte importante della domanda, continuo a contrassegnarla come risposta.
Yuning,

A proposito, puoi indicarmi ulteriormente l'applicazione dell'argomento, in particolare se uno ha una specifica formale di un programma, può trovare la dimensione più piccola dalla specifica?
Yuning,

1

La risposta per la prima domanda è Sì, c'è una teoria, è la teoria dell'informazione algoritmica e quelli sono chiamati programmi eleganti (di Gregory Chaitin).

Per la seconda domanda su "è il programma che ottengo il più semplice"?

Non c'è risposta , perché è una domanda inaudibile, non è possibile dimostrare che un programma sia un programma Elegante.

Ho inserito una risposta per aggiungere la menzione di programmi eleganti .


-1

Esistono diversi tipi di approccio per decidere cos'è un codice semplice e cosa no.

Ma purtroppo non esiste un modo automatico per determinarlo, ad esempio, la complessità di Kolmogorov fallisce con funzioni ricorsive, alcune funzioni ricorsive (logicamente profonde) sono semplici ma la comprensione al riguardo non è così semplice.

Nella mia esperienza, il nostro team stava lavorando in un sistema e abbiamo trovato una procedura "semplice" in Oracle (non più di 50 righe) ... e abbiamo cercato di capirlo, ci sono voluti 2 mesi (e diverse riunioni) per capire appieno esso, non dalla complessità del codice ma nella logica dietro ogni variabile.

Penso che il modo per determinare quanto sia semplice un codice sia: "leggi un codice e considera il tempo impiegato per capirlo".

Quindi "Il programma più semplice per risolvere un problema?" può essere diviso in:

a) semplicità del codice (codice chiaro) ma è troppo soggettivo.

b) l'eccesso di complessità della funzione, se ho un problema con X, allora devo risolvere il compito DX (Delta X) per risolverlo, dove DX deve andare verso X.

Ad esempio, se il mio problema è (uno) "sbucciare una mela" e devo farlo in PHP (e lingua), allora

se sono estremamente fortunato e PHP ha la funzione function_peel_apple (), allora è il codice più semplice di sempre X = 1 DX = 1, basta chiamare la funzione e il gioco è fatto !.

Al contrario, se non sono così fortunato, ma esiste la funzione function_peel () e function_get_apple (), allora X = 1 (un problema) e DX = 2 (due compiti).

Se, nel peggiore dei casi, non esiste alcuna funzione, allora devo crearne una (o più di una) da sola e aggiungere diverse attività prima di risolvere il problema, ora è un programma complesso.

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.