Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza del computer >> Domanda >> PC Risoluzione dei problemi >> .

Come si può applicare la riduzione del problema di arresto per determinare la calcolabilità di un determinato algoritmo?

La riduzione del problema di arresto è un potente strumento per dimostrare che un determinato problema (o algoritmo) è indecidibile , nel senso che non esiste un algoritmo generale che possa sempre determinare correttamente se l'istanza del problema fornita può essere risolta da qualche altro algoritmo. * Non * non ti dice direttamente se un algoritmo * è * calcolabile, ma piuttosto se determina * una proprietà su * l'algoritmo è calcolabile.

Ecco come funziona la riduzione:

1. Comprensione del problema di arresto:

*Il problema di arresto chiede:dato un algoritmo (programma) *H *e un input *i *Per quell'algoritmo, Will *H *Halt (termina in esecuzione) quando eseguito con input *i *?

* Il problema di arresto è indecidibile . Non ci sono algoritmo, `si interrompe (h, i)`, che può sempre restituire correttamente `vero` if *h *si interrompe su *i *e` false` if *h *loop per sempre.

2. La tecnica di riduzione (prova per contraddizione):

Per dimostrare che un problema * p * è indecidenziale, fai quanto segue:

1. Supponiamo, per motivi di contraddizione, che * p * sia decidibile. Ciò significa che supponiamo che esista un algoritmo `Solvep (inputForP)` che restituisce sempre correttamente la soluzione per qualsiasi istanza di problema *P *.

2. Costruire una riduzione: Devi mostrare come utilizzare l'algoritmo ipotetico `risolvep ()` per risolvere il problema di arresto. In altre parole, crei un algoritmo `si ferma (h, i)` che usa `solvep ()` come subroutine. Questo algoritmo `si ferma (h, i)` dovrebbe funzionare come segue:

`` `

Halts (h, i):

1. Trasforma l'istanza del problema di fermo (h, i) in un'istanza del problema P, chiamiamola `inputforp`. Questo è il passaggio cruciale:stai realizzando `inputforp` in un modo *La soluzione al problema P su questo input rivela direttamente se H si interrompe su I *. I dettagli di come si fa questa trasformazione dipendono interamente dal problema *p *.

2. Resultp =Solvep (inputForp) // chiama il nostro ipotetico risolutore per il problema P.

3. Basato su risultati, determinare se H si interrompe su i e restituisce vero o falso di conseguenza.

`` `

3. Mostra che la tua riduzione implica una soluzione al problema di arresto: Spiega chiaramente come il risultato di `Solvep (inputForp)` ti dice direttamente se l'algoritmo *H *si interrompe sull'ingresso *i *.

4. Contraduzione: Poiché il problema di arresto è noto per essere indecidenziale e hai dimostrato che un ipotetico "risolto" potrebbe essere usato per risolverlo, hai raggiunto una contraddizione.

5. Conclusione: Pertanto, il nostro presupposto iniziale (che * p * sia decidibile) deve essere falso. Pertanto, il problema * p * è indecidibile.

Idee e sfide chiave:

* La trasformazione è la chiave: La parte più difficile è trovare una trasformazione da (h, i) a un'istanza di *p *tale che la soluzione a *p *rivela direttamente se *h *si interrompe su *i *. Ciò richiede intelligenza e comprensione sia del problema di arresto che del problema *p *.

* Prova per contraddizione: Non stai * direttamente * dimostrando che * P * è indecidibile. Stai dimostrando che se * p * * fosse * decidabile, porterebbe a un'impossibilità (risolvendo il problema di arresto).

* Generalizzazione: L'obiettivo è dimostrare che *non può *esistere un algoritmo che risolve *P *per *tutti i possibili input *. La tua riduzione deve essere valida per qualsiasi algoritmo arbitrario *H *e input *i *.

Esempio:il problema del vuoto per le macchine Turing

Il problema del vuoto per le macchine Turing chiede:data una macchina Turing *m *, il linguaggio è accettato da *m *vuoto (cioè *m *accetta *qualsiasi *input)? Mostriamo che questo è indecidibile.

1. Supponiamo che il vuoto sia decidabile: Supponiamo che ci sia un algoritmo `isEmpty (m)` che restituisce `vero` se la lingua accettata da * m * è vuota e` false` altrimenti.

2. Riduzione: Creeremo un algoritmo `Halts (h, i)` che usa `isEmpty ()`:

`` `

Halts (h, i):

1. // Costruisci una nuova macchina Turing M_HI

// - M_HI prende qualsiasi input w.

// - m_hi prima simula h su I.

// - Se H si interrompe su i, allora m_hi accetta w.

// - Se H non si ferma su i, allora m_hi loop per sempre.

M_hi =costructm (h, i)

2. Risultato =isEmpty (M_HI)

3. Se risultato ==vero:

restituire false // h non si ferme su i

altro:

Restituisce vero // H si ferma su i

`` `

3. Perché funziona:

*Se *H *si ferma *i *, allora `m_hi` accetterà *ogni *input` w`. Pertanto, la lingua accettata da `m_hi` non è vuota (in realtà è σ*, l'insieme di tutte le stringhe). Pertanto, `isempty (m_hi)` restituirà `false`, e` ferme (h, i) `restituisce` vero`.

*Se *h *non si ferma *su *i *, allora `m_hi` si lancerà per sempre su *ogni *input` w`. Pertanto, la lingua accettata da `m_hi` è vuota. Pertanto, `isempty (m_hi)` restituirà `vero`, e` ferme (h, i) `restituisce` false`.

4. Contraduzione: Abbiamo creato un algoritmo `Halts (h, i)` che usa `isEmpty ()` per risolvere il problema di arresto. Ma il problema di arresto è indecidibile, quindi questa è una contraddizione.

5. Conclusione: Pertanto, il problema del vuoto per le macchine Turing è indecidibile.

Note importanti:

* La riduzione mostra che il problema * P * è * almeno difficile come * il problema di arresto. Poiché il problema di arresto è indecidibile, lo è anche *p *.

* Le riduzioni vengono spesso utilizzate per dimostrare l'indecidabilità, ma possono anche essere utilizzate per dimostrare la completezza NP nel contesto della complessità computazionale.

* L'algoritmo `costructm (h, i)` Nell'esempio sopra è un costrutto teorico. In pratica, in realtà non "costruiresti" una macchina fisica. Il punto è che * in linea di principio * è possibile descrivere tale macchina.

In sintesi, la riduzione del problema di arresto è una potente tecnica di prova che ci aiuta a comprendere i limiti del calcolo. Dimostrando che risolvere un problema particolare implicherebbe una soluzione al problema di arresto (che sappiamo è impossibile), possiamo concludere che il problema è indecidibile.

 

Domanda © www.354353.com