Qual è la differenza tra un algoritmo, una lingua e un problema?


40

Sembra che su questo sito, le persone spesso correggano gli altri per confondere "algoritmi" e "problemi". Quali sono le differenze tra questi? Come faccio a sapere quando dovrei considerare gli algoritmi e i problemi? E come si collegano al concetto di un linguaggio nella teoria del linguaggio formale?


Un algoritmo è un modo per risolvere un problema.
reinierpost,

Risposte:


53

Per semplicità, inizierò considerando solo i problemi di "decisione", che hanno una risposta sì / no. I problemi di funzione funzionano più o meno allo stesso modo, tranne che invece di sì / no, è presente una parola di output specifica associata a ciascuna parola di input.

Lingua : una lingua è semplicemente un insieme di stringhe. Se hai un alfabeto, come , allora Σ è l'insieme di tutte le parole che contengono solo i simboli in Σ . Ad esempio, { 0 , 1 } ΣΣΣ{0,1} è l'insieme di tutte le sequenze binarie di qualsiasi lunghezza. Tuttavia, non è necessario che un alfabeto sia binario. Può essere unario, ternario, ecc.

Una lingua sopra un alfabeto è un sottoinsieme di Σ .ΣΣ

Problema : un problema è una domanda su alcuni input a cui vorremmo ricevere una risposta. In particolare, un problema di decisione è una domanda che pone: "Il nostro dato input soddisfa la proprietà ?X

Una lingua è la realizzazione formale di un problema. Quando vogliamo ragionare teoricamente su un problema decisionale, esaminiamo spesso la lingua corrispondente. Per un problema , la lingua corrispondente è:X

è la codifica di un input y per il problema X e la risposta per input y per il problema X è "Sì" }L={wwyXyX}

Determinare se la risposta per un input a un problema di decisione è "sì" equivale a determinare se una codifica di quell'input su un alfabeto è nella lingua corrispondente.

Algoritmo : un algoritmo è un modo passo-passo per risolvere un problema. Si noti che un algoritmo può essere espresso in molti modi e in molte lingue e che ci sono molti algoritmi diversi che risolvono un determinato problema.

Turing Machine : una Turing Machine è l'analogo formale di un algoritmo. Una macchina di Turing su un dato alfabeto, per ogni parola, si fermerà o non si fermerà in uno stato accettante. Pertanto, per ogni Turing Machine , esiste una lingua corrispondente:M

arresta in uno stato accettante sull'input w } .L(M)={wMw}

(C'è una sottile differenza tra le macchine di Turing che si fermano su tutti gli ingressi e si fermano su ingressi sì, che definisce la differenza tra le classi di complessità e R E. )RRE

La relazione tra le lingue e le macchine di Turing è la seguente

  1. Ogni macchina Turing accetta esattamente una lingua

  2. Potrebbe esserci più di una Turing Machine che accetta una determinata lingua

  3. Potrebbe non esserci nessun Turing Machine che accetta una determinata lingua.

Possiamo dire all'incirca la stessa cosa su algoritmi e problemi: ogni algoritmo risolve un singolo problema, ma possono esserci 0 o molti algoritmi che risolvono un determinato problema.

Complessità temporale : una delle più comuni fonti di confusione tra algoritmi e problemi riguarda le classi di complessità. L'allocazione corretta può essere sintetizzata come segue:

  • Un algoritmo ha una complessità temporale
  • Un problema appartiene a una classe di complessità

Un algoritmo può avere una certa complessità temporale. Diciamo che un algoritmo ha una complessità nel limite superiore caso peggiore se l'algoritmo si ferma al massimo f ( n ) passi per qualsiasi input di dimensione n .f(n)f(n)n

I problemi non hanno tempi di esecuzione, poiché un problema non è legato a un algoritmo specifico che viene effettivamente eseguito. Invece, diciamo che un problema appartiene a una classe di complessità, se esiste un algoritmo che risolve quel problema con una data complessità temporale.

P,NP,PSPACE,EXPTIME etc. are all complexity classes. This means they contain problems, not algorithms. An algorithm can never be in P, but if there's a polynomial-time algorithm solving a given problem X, then X is in P. There could also be a bunch of exponential-time algorithms accepting X, but since there exists a single polynomial-time algorithm accepting X, it is in P.


1
Please feel free to edit this answer as you see fit.
jmite

I think it would be good to mention that there are other kinds of computational problems (e.g. search problems).
Kaveh

1
Says who? That kind of thinking is part of why people had so much trouble formalizing and algorithm before the intention of the Turing Machine. The Church-Turing Thesis says that an algorithm IS a turing machine and vice versa, and not all turing machines halt.
jmite

4
Dude, this is the greatest answer I've ever seen. You just summarized all of computer science in 1 page.
CaptainCodeman

1
@gnasher729 there's a theorem that says it can be defined in terms of verifying, but it's actual definition is in terms of time complexity for Non deterministic machines, thus the name NP: nondeterministic polynomial
jmite
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.