Cardinalità dell'insieme di algoritmi


15

Qualcuno in una discussione ha sollevato il fatto che (pensa) ci può essere almeno un numero continuo di strategie per affrontare un problema specifico. Il problema specifico era rappresentato dalle strategie di trading (non dagli algoritmi ma dalle strategie) ma penso che non sia il punto della mia domanda.

Questo mi ha fatto pensare alla cardinalità dell'insieme di algoritmi. Ho cercato un po 'in giro ma non ho trovato nulla. Ho pensato che, dal momento che le macchine turing funzionano con un set finito di alfabeto e che il nastro deve essere indicizzabile e numerabile, è impossibile avere un numero innumerevole di algoritmi. La mia teoria dell'insieme è certamente arrugginita, quindi non sono affatto sicuro che il mio ragionamento sia valido e probabilmente non sarei in grado di dimostrarlo, ma è un pensiero interessante.

Qual è la cardinalità dell'insieme di algoritmi?


1
Come menzionato da Yuval Filmus, ci sono molte macchine Turing. Esistono tuttavia molte famiglie non uniformi di circuiti booleani, poiché possono calcolare qualsiasi funzione di valore booleano. Ma probabilmente non è quello che intendevi con "algoritmo".
Ripristina Monica il

Risposte:


28

Un algoritmo viene descritto in modo informale come una sequenza finita di istruzioni scritte per eseguire alcune attività. Più formalmente, sono identificati come macchine di Turing, anche se potresti anche descriverli come programmi per computer.

Il formalismo preciso che usi non ha molta importanza, ma il punto fondamentale è che ogni algoritmo può essere scritto come una sequenza finita di caratteri, in cui i caratteri vengono scelti da un insieme finito, ad esempio lettere romane, ASCII o zero e uno. Per semplicità, assumiamo zero e uno. Qualsiasi sequenza di zero e uno è solo un numero naturale scritto in binario. Ciò significa che esiste al massimo un'infinità numerabile di algoritmi, poiché ogni algoritmo può essere rappresentato come un numero naturale.

Per il pieno credito, dovresti preoccuparti che alcuni numeri naturali potrebbero non codificare programmi validi, quindi potrebbero esserci meno algoritmi rispetto ai numeri naturali. (Per il credito bonus, si potrebbe anche chiedere se è possibile che due diversi numeri naturali rappresentano lo stesso algoritmo.) Tuttavia, print 1, print 2, print 3e così via sono tutti algoritmi e tutti diversi, quindi ci sono almeno numerabile infinitamente molti algoritmi.

Quindi concludiamo che l'insieme di algoritmi è numericamente infinito.


I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Gilles 'SO- smetti di essere malvagio' il

10

L'insieme di algoritmi è numericamente infinito. Questo perché ogni algoritmo ha una descrizione finita, diciamo come una macchina di Turing.

Il fatto che un algoritmo abbia una descrizione finita ci consente di inserire un algoritmo in un altro, e questa è la base della teoria della calcolabilità. Ci consente, ad esempio, di formulare il problema dell'arresto.


7

almeno un numero continuo di strategie per affrontare un problema specifico

"Continuum" probabilmente dovrebbe significare i numeri reali ... usando "almeno" insieme a quella parola è assurdamente esagerato. Per essere un po 'a bocca aperta: numerabile infinito è piuttosto grande, ma innumerevolmente infinito è ... più grande che grande. Molto di più. Insondabile.

Quindi buttiamolo fuori dalla finestra. Per vedere con che tipo di infinito abbiamo a che fare è morto semplice (e intuitivo, anche se il tuo amico non ha mai sentito parlare di alcuna informatica teorica):

  • Qualsiasi algoritmo può essere implementato con qualsiasi linguaggio completo; scegli il tuo veleno preferito delle lingue del mondo reale (Java, C, ...) per demistificare un po 'questo. Tutti questi sono equivalenti al set teorico di algoritmi che chiunque potrebbe mai inventare. Si noti che ogni algoritmo è di per sé finito, cioè non esistono algoritmi che richiederebbero infinitamente molti simboli per scrivere.
  • Non pensare alle complicate macchine di Turing. La tua lingua preferita utilizza file semplici per memorizzare il suo codice sorgente. Ogni file è una raccolta di piccoli numeri (aka, byte). L'importante è che questi numeri siano decisamente interi, non continui. (Se sei un purista e vuoi rimanere nel regime teorico, sostituisci la parola "byte" con "simbolo", non cambia nulla.) Se hai paura dei programmi di grandi dimensioni che sono distribuiti su più file (e librerie e altre cose), quindi comprimile in un unico archivio compresso (ovvero un singolo file).
  • Ora puoi assegnare un singolo numero intero a ogni file là fuori, biiettivamente. Scriviamo semplicemente l'intero pasticcio di bit / byte del file uno dopo l'altro e finiamo con un numero molto grande espresso in binario. In un lontano passato, la gente lo faceva davvero: stampavano programmi binari compilati come lunghe liste di numeri esadecimali su riviste; li digiteresti, ma non li vedresti mai come qualcosa di diverso dai numeri (spesso raggruppati convenientemente in set di 8 o 16 cifre per facilitare la digitazione).
  • Quindi: ogni programma può essere rappresentato da un numero intero, anche se arbitrariamente grande. Funziona anche il contrario: ogni numero intero può essere immediatamente e banalmente trasferito in un file e lanciato in un compilatore (ovviamente, solo una piccola parte di questi saranno programmi validi, ma non ci interessa ora).
  • Alla fine, i programmi, e quindi gli algoritmi, sono un sottoinsieme degli interi; quindi, solo numerosamente molti possono esistere.
  • NB, il fatto che ci siano molte diverse implementazioni di un singolo algoritmo è a nostro favore, cioè molti di questi numeri si condensano nello stesso algoritmo (diverse rappresentazioni). Quindi se l'infinito numerabile non fosse già il più piccolo tipo di infinito, dovremmo preoccuparci che il numero di algoritmi sia ancora più piccolo, ma certamente non più grande (cioè non numerabile).

Il problema specifico erano le strategie di trading (non algoritmi ma strategie)

Non so cosa significhi il tuo amico con "strategia"; Presumo che significhi qualcosa che è un po 'come un algoritmo, ma non abbastanza formulato in modo abbastanza dettagliato da hackerarlo in un computer? O quale in qualche modo dipende dall'intuizione umana durante l'esecuzione? In tal caso, questi sono solo dettagli irrilevanti. L'umanità non ha ancora trovato alcun tipo di descrizione dei processi più potente o più ampia degli "algoritmi" nel senso che usiamo in CS.


3
Ri: "Probabilmente" Continuum "significa i numeri reali ... usare" almeno "insieme a quella parola è assurdamente sopra le righe": non c'è nulla "sopra le righe" al riguardo, figuriamoci "assurdamente", quindi . Esistono più insiemi di numeri reali di quanti siano i numeri reali, quindi è abbastanza normale parlare di insiemi più grandi del continuum.
Ruakh,

6

Vedi la numerazione di Gödel , è un fatto di base nell'informatica che gli algoritmi sono numerabili, come lo sono per estensione insiemi ricorsivamente enumerabili.

Essendo algoritmi numerabili, è facile dimostrare che non esiste un algoritmo per verificare ogni set in un sistema formale (assegnare un valore di verità a un problema). Ciò equivarrebbe ad assegnare un algoritmo a ogni funzione mappando l'insieme di problemi su valori booleani. L'insieme di queste funzioni è tuttavia non numerabile (banalmente della stessa cardinalità dell'insieme di potenza dell'insieme di problemi, quindi non numerabili).

Spero che questo dia qualche intuizione sul perché gli algoritmi debbano essere "meno potenti" di qualsiasi altra funzione, un modo così numerabile (ignoriamo qui l'ipotesi del continuum).


2

Se uno non inizia con il requisito che una strategia deve essere implementabile con un algoritmo e ignora gli effetti di discretizzazione nella vita reale, si potrebbe ad esempio accettare quanto segue come strategia di trading parametrizzata:

abab

aB


0

Se concepiamo algoritmi come programmi per computer scritti in binario *, allora il numero di algoritmi è il numero di numeri binari (interi). Quindi la cardinalità degli algoritmi è la cardinalità degli interi.

* Una prova che le macchine turing possono eseguire tutti gli algoritmi e che i computer possono eseguire qualsiasi macchina turing di programmi renderebbe questa risposta inutilmente lunga. Il primo può dipendere dalla definizione di un algoritmo, ma non credo che tu stia utilizzando strategie di trading ineguagliabili.


1
Cosa aggiunge questo alle risposte esistenti?
David Richerby,

"Una prova che i turing machine possono eseguire tutti gli algoritmi ... renderebbe questa risposta inutilmente lunga". Ciò renderebbe impossibile la risposta, dal momento che non si può davvero dimostrare la tesi di Church-Turing
John Coleman,

@DavidRicherby Aggiunge brevità.
user558317

1
@JohnColeman Affermare l'impossibilità di una prova, senza una prova? Volevo dire che a) all'OP probabilmente non sarebbe importato, dal momento che b) è una questione di definizione. La domanda sembra contenere il presupposto: "poiché le macchine di Turing funzionano con un set finito di alfabeto e il nastro deve essere indicizzabile e quindi numerabile, è impossibile avere un numero infinito di algoritmi".
user558317

0

Le altre risposte hanno già spiegato che nel modello standard di calcolo (macchine di Turing, calcolo lambda, ecc.) L'insieme di algoritmi è numericamente infinito.

Tuttavia, ci sono altri modelli teorici di calcolo in cui l'insieme di algoritmi è infinitamente numeroso. Ad esempio, le macchine Blum – Shub – Smale hanno un set infinito infinito di istruzioni 1 , quindi anche il loro set di algoritmi è innumerevolmente infinito.


1 Per essere precisi, l'insieme di istruzioni stesso è finito, ma è parametrizzato usando un insieme infinito infinito (le funzioni razionali).


Le funzioni razionali non sono numerabili?
Ben Millwood,

@BenMillwood Puoi brevemente abbozzare una prova del perché questo potrebbe essere il caso?
Marco C

@BenMillwood Per ciascuno X0R, la funzione costante f:XX0è una funzione razionale.
Florian Brucker,

Oh, stavo supponendo che anche le costanti dovevano essere razionali. Non importa allora.
Ben Millwood,

-1

poiché le macchine turing operano con un set finito di alfabeto e il nastro deve essere indicizzabile in modo da poter essere numerato

Data una dimensione particolare, ci sono finitamente molte macchine Turing e ci sono molte dimensioni. Un insieme numerabile di numeri, purché limitati, è numerabile. La dimensione dell'alfabeto è un fattore nel numero di macchine Turing, ma non la dimensione del nastro. Se all'alfabeto fosse permesso di avere numerosamente molti caratteri, allora ci sarebbero innumerevoli molte macchine (ogni numero reale potrebbe essere codificato come una sequenza di simboli).

Se "algoritmo" intendi semplicemente una corrispondenza tra input e output, e non una macchina di Turing o comunque qualcosa che è il normale senso di "calcolo", allora chiaramente se ci sono molti input diversi, allora ci sono innumerevoli algoritmi: ogni numero reale, potremmo definire un "algoritmo" che accetta un numero naturale come input e genera quel decimale. Ad esempio, dando l'ingresso "3" a.5l'algoritmo darebbe l'output di "7". (Notare che mentre è possibile progettare una macchina di Turing che fornisce l'ennesima cifra di.5, non è possibile farlo per tutti i numeri reali; sono calcolabili solo molti numeri reali).


Non capisco cosa stai cercando di fare, qui. La domanda riguarda il numero di algoritmi e l'algoritmo è la macchina di Turing, non l'input. Consentire all'infinito un numero infinito di caratteri non vuoti sul nastro all'inizio non influirebbe sul numero di algoritmi e, in ogni caso, qualsiasi esecuzione di terminazione sarebbe in grado di leggere solo un prefisso finito dell'input. Nel frattempo, il tuo secondo paragrafo confonde gli algoritmi con le funzioni matematiche. Per tutti, ma numerosamente molti reali, non esiste un algoritmo che può dirtinth cifra nell'espansione decimale.
David Richerby,

E cosa significherebbe avere innumerevoli algoritmi, comunque? Puoi solo scrivere molti. In che senso è qualcosa che non puoi scrivere un algoritmo?
David Richerby,

@DavidRicherby Sì, ho confuso alcune cose. Ma si può usare "algoritmo" in senso generale per riferirsi a una sequenza di scelte. E in tal senso, la scelta di una cifra basata sull'input è un "algoritmo", sebbene non calcolabile.
Accumulazione,

In informatica, "algoritmo" e "calcolabile" sono la stessa cosa. Un algoritmo è una macchina di Turing.
David Richerby,
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.