La teoria della complessità computazionale è un'area fondamentale dell'informatica teorica che studia rigorosamente le risorse necessarie per risolvere problemi computazionali. Una comprensione precisa del suo formalismo richiede la conoscenza di diverse definizioni, notazioni e quadri concettuali matematici fondamentali. Questi forniscono il linguaggio e gli strumenti necessari per articolare, analizzare e confrontare la difficoltà computazionale dei problemi e l'efficienza degli algoritmi.
1. Insiemi, funzioni e relazioni
Set
Un insieme è una collezione ben definita di oggetti distinti, chiamati elementi. Nella teoria della complessità, gli insiemi spesso rappresentano collezioni di stringhe, numeri o stati. La notazione standard per un insieme è in lettere maiuscole, come or
. Per esempio,
indica comunemente un alfabeto, ovvero un insieme finito di simboli.
- Esempio: If , allora l'insieme di tutte le stringhe binarie di lunghezza 3 è
.
funzioni
Una funzione assegna a ogni elemento
esattamente un elemento
Le funzioni sono fondamentali per descrivere algoritmi, trasformazioni e misure di complessità.
- Esempio: La funzione associa i numeri naturali alle rispettive potenze di due.
Relazioni
una relazione è un sottoinsieme del prodotto cartesiano di insiemi
e
Nel contesto dei linguaggi e dei problemi decisionali, le relazioni spesso descrivono la mappatura tra input e output o certificati associati.
2. Alfabeti, stringhe e lingue
Alfabeto e stringhe
Un alfabeto è un insieme finito e non vuoto di simboli. Una stringa su
è una sequenza finita di simboli da
L'insieme di tutte le stringhe su
è indicato
Durante la serata,
rappresenta l'operazione della stella di Kleene.
- Esempio: Per ,
è una stringa in
.
Le Lingue
Una lingua ancora
è un qualsiasi sottoinsieme di
Nella complessità computazionale, i linguaggi rappresentano problemi decisionali: per una stringa
, la domanda è se
.
- Esempio: La lingua contiene un numero pari di zeri
.
3. Problemi decisionali e modelli computazionali
Problemi decisionali
Un problema decisionale pone una domanda a risposta sì/no su un input. Formalmente, corrisponde a un linguaggio. : "Dato
, è
? "
- Esempio: "Dato un grafico , fa
avere un ciclo hamiltoniano?" è un problema decisionale.
Modelli computazionali
La teoria della complessità formalizza il calcolo utilizzando macchine astratte. La più importante è la macchina di Turing.
- Macchina di Turing (TM): Un modello astratto definito da un insieme finito di stati, un nastro infinito diviso in celle, una testina e una funzione di transizione. Una macchina di Turing deterministica (DTM) ha una singola transizione per ogni coppia stato-simbolo; una macchina di Turing non deterministica (NTM) può avere più transizioni.
4. Notazione asintotica
La notazione asintotica descrive il comportamento limite delle funzioni, importante per esprimere l'utilizzo delle risorse (tempo, spazio) degli algoritmi all'aumentare delle dimensioni dell'input.
Notazione O grande
- Definizione: se esistono costanti
e
tale che per tutti
,
.
- Interpretazione: non cresce più velocemente di
fino a multipli costanti per grandi
.
- Esempio: .
Notazioni Omega e Theta
- Grande Omega ():
se per alcuni
,
per tutti
.
- Grande Theta ():
if
e
.
Queste notazioni consentono il confronto formale dell'efficienza algoritmica.
5. Misure di complessità
Complessità temporale
Descrive il numero di passaggi computazionali (ad esempio, transizioni di una macchina di Turing) richiesti in funzione della dimensione dell'input .
- Notazione: or
per il tempo impiegato sugli input di lunghezza
.
Complessità spaziale
Descrive la quantità di memoria (celle del nastro utilizzate) in funzione della dimensione dell'input.
- Notazione: .
I limiti delle risorse sono in genere considerati in senso asintotico, per grandi dimensioni di input.
6. Classi di complessità
Le classi di complessità raggruppano i linguaggi (problemi) in base alle risorse necessarie per risolverli.
P (tempo polinomiale)
- Definizione: La classe di linguaggi decidibili da una macchina di Turing deterministica in tempo polinomiale.
- Formalizzazione: .
- Esempio: Ordinare un elenco, verificare se un numero è primo.
NP (tempo polinomiale non deterministico)
- Definizione: Classe di linguaggi per i quali una soluzione può essere verificata in tempo polinomiale da una macchina di Turing deterministica o, in modo equivalente, decisa da una macchina di Turing non deterministica in tempo polinomiale.
- Formalizzazione: .
- Esempio: Soddisfacibilità (SAT), ciclo hamiltoniano.
Altre classi
- PSPACE: Linguaggi decidibili nello spazio polinomiale.
- TEMPO DI ESPERIENZA: Lingue decidibili in tempo esponenziale.
7. Riduzioni
Le riduzioni sono mappature da un problema all'altro, che dimostrano la relativa difficoltà computazionale.
Riduzione molti-uno (
)
Una lingua è molti-uno riducibile a
(
) se esiste una funzione calcolabile
così
.
- Scopo: If è facile, e
, poi
è al massimo difficile quanto
.
Riduzione in tempo polinomiale (
)
Una riduzione calcolabile in tempo polinomiale viene utilizzata per confrontare i problemi all'interno e
. Se
è calcolabile in tempo polinomiale, e
, poi
.
8. NP-Completezza
Un problema è NP-completo se:
1. È in .
2. Ogni problema in è riducibile ad esso in tempo polinomiale.
Notazione: è NP-completo se
e
.
- Esempio: Il problema SAT è il problema NP-completo canonico.
9. Decisione vs. Problemi di ricerca
Mentre i problemi decisionali pongono domande a risposta sì/no, i problemi di ricerca richiedono di trovare una soluzione esplicita. La teoria della complessità si concentra spesso sui problemi decisionali, ma i problemi di ricerca sono strettamente correlati, in particolare in crittografia e nella progettazione di algoritmi.
10. Teoria del linguaggio formale
La teoria della complessità sfrutta la teoria dei linguaggi formali per rappresentare e analizzare i problemi.
- Lingue regolari: Riconosciuto dagli automi finiti.
- Linguaggi liberi dal contesto: Riconosciuto dagli automi a pila.
- Linguaggi ricorsivi (decidibili) e ricorsivamente enumerabili (semi-decidibili): Riconosciuto dalle macchine di Turing con o senza garanzie di arresto.
11. Notazione per le macchine di Turing
Una macchina di Turing è specificato da una tupla
, dove:
- : Insieme finito di stati
- : Inserisci l'alfabeto (non include il simbolo vuoto)
- : Alfabeto a nastro (
), include il simbolo vuoto
- : Funzione di transizione
- : Stato iniziale
- : Accetta stato
- : Stato di rifiuto
Il calcolo di in ingresso
è indicato
.
12. Dimensione di input
La lunghezza dell'input, indicata , è misurato come
, il numero di simboli nella stringa di input
Tutte le misure di complessità (tempo, spazio) sono espresse come funzioni di
.
13. Macchina di Turing universale
Una macchina di Turing universale può simulare qualsiasi macchina di Turing
in ingresso
, data una descrizione
e
Ciò costituisce la base teorica della tesi di Church-Turing.
14. Certificati e verificatori
Per problemi, un verificatore è una macchina di Turing deterministica
tale che per qualsiasi input
, esiste un certificato
(con
polinomio in
) soddisfacente
se e solo se
è un caso "sì".
- Esempio: Per il SAT, il certificato è un compito soddisfacente.
15. Classi di complessità randomizzate
- RP (tempo polinomiale randomizzato): Problemi per i quali una macchina di Turing probabilistica può decidere l'appartenenza con errore unilaterale in tempo polinomiale.
- BPP (tempo polinomiale probabilistico con errore limitato): Problemi per i quali una macchina di Turing probabilistica può decidere l'appartenenza con errore bilaterale in tempo polinomiale.
16. Macchine Oracle
Una macchina di Turing oracolare ha accesso a un "oracolo" che decide istantaneamente l'appartenenza a un linguaggio fisso Questo concetto viene utilizzato per studiare la computabilità relativa e le separazioni tra classi.
17. Teoremi di gerarchia
I teoremi di gerarchia formalizzano l'idea che più risorse consentono la soluzione di più problemi.
- Teorema della gerarchia temporale: Esistono problemi risolvibili in più tempo, ma non in meno.
- Teorema della gerarchia spaziale: Affermazione analoga per lo spazio.
18. Completezza e durezza
- Durezza: Un problema is
-difficile se ogni problema in classe
si riduce a
.
- Completezza: is
-completo se
e
is
-difficile.
19. Circuiti booleani
I circuiti booleani modellano il calcolo come reti acicliche di porte logiche. La complessità del circuito studia la dimensione (numero di porte) e la profondità (livelli di porte) necessarie per calcolare le funzioni.
20. Codifica e rappresentazione
Tutti gli oggetti (macchine di Turing, grafi, formule) devono essere codificati come stringhe su un alfabeto finito per poter essere analizzati nell'ambito della teoria della complessità. Le codifiche standard garantiscono un trattamento uniforme e la comparabilità di problemi e algoritmi.
-
La padronanza di queste definizioni e notazioni formali è necessaria per una comprensione precisa e rigorosa della teoria della complessità computazionale. Questi strumenti formali sono alla base della classificazione dei problemi computazionali, della progettazione e dell'analisi degli algoritmi e dello studio dei presupposti di sicurezza crittografica.
Altre domande e risposte recenti riguardanti Fondamenti di teoria della complessità computazionale EITC/IS/CCTF:
- Perché la teoria della complessità computazionale è importante per comprendere i fondamenti della crittografia e della sicurezza informatica?
- Qual è il ruolo del teorema di ricorsione nella dimostrazione dell'indecidibilità di ATM?
- Considerando un PDA in grado di leggere i palindromi, potresti descrivere in dettaglio l'evoluzione dello stack quando l'input è, in primo luogo, un palindromo e, in secondo luogo, non un palindromo?
- Considerando i PDA non deterministici, la sovrapposizione di stati è possibile per definizione. Tuttavia, i PDA non deterministici hanno solo uno stack che non può essere in più stati contemporaneamente. Come è possibile?
- Qual è un esempio di come i PDA vengono utilizzati per analizzare il traffico di rete e identificare modelli che indicano potenziali violazioni della sicurezza?
- Cosa significa che una lingua è più potente di un'altra?
- I linguaggi sensibili al contesto sono riconoscibili da una macchina di Turing?
- Perché il linguaggio U = 0^n1^n (n>=0) non è regolare?
- Come definire una FSM che riconosce stringhe binarie con un numero pari di simboli '1' e mostrare cosa succede quando elabora la stringa di input 1011?
- In che modo il non determinismo influisce sulla funzione di transizione?
Visualizza altre domande e risposte in EITC/IS/CCTF Computational Complexity Theory Fundamentals