È possibile (barra puoi fornire un esempio) per ridurre la complessità computazionale di un problema usando un algoritmo parallelo che non richiede un numero di processori rispetto alla dimensione dell'input?
È possibile (barra puoi fornire un esempio) per ridurre la complessità computazionale di un problema usando un algoritmo parallelo che non richiede un numero di processori rispetto alla dimensione dell'input?
Risposte:
Se intendete processori O (1), allora no, la complessità di calcolo non può essere ridotta.
Allinea semplicemente il lavoro svolto da ciascun processore e fallo su un singolo. Se sei preoccupato per la sincronizzazione, un processore può facilmente emularlo.
Esiste un campo emergente di algoritmi paralleli a grana grossa, in cui il tempo di esecuzione (e il consumo di altre risorse computazionali) è considerato una funzione di parametri indipendenti n (dimensione dell'input) e p (numero di processori), spesso sotto un presupposto naturale n >> p .
Un buon punto di partenza è google per il "parallelismo sincrono alla rinfusa".
Potresti essere interessato a questo documento:
Prestazioni superlineari nel calcolo parallelo in tempo reale di Selim Akl.
Ma NESSUN cambiamento di complessità.
"non puoi calcolarlo con 1 processore, ma puoi calcolarlo con 2."
Ciò non è possibile, supponendo che entrambi i processori siano TM o un modello meno potente. Da Wikipedia, per macchine multi-nastro:
Questo modello sembra intuitivamente molto più potente del modello a nastro singolo, ma qualsiasi macchina multi-nastro, non importa quanto sia grande la k, può essere simulata da una macchina a nastro singolo usando solo quadraticamente più tempo di calcolo (Papadimitriou 1994, Thrm 2.1)
Anche per le macchine a più teste, da "Simulazione lineare del tempo di macchine a testa multipla con salti testa a testa" di Walter J. Savitch e Paul MB Vitányi:
Il risultato principale di questo documento mostra che, data una macchina di Turing con diverse testine di lettura / scrittura per nastro e che ha l'ulteriore operazione di spostamento del movimento "sposta una data testa nella posizione di un'altra data testa", si può effettivamente costruire un macchina Turing multitape con una sola testina di lettura / scrittura per nastro che la simula in tempo lineare; cioè se la macchina originale opera nel tempo T (n), allora la macchina simulante funzionerà nel tempo cT (n), per qualche costante c.
Forse "parallelo o" (date due funzioni che restituiscono un valore booleano, dire se una di esse ritorna vera, dato che qualcuno di loro, ma non entrambi, potrebbe non riuscire a terminare) potrebbe essere quello di cui stai parlando: non puoi calcolare con 1 processore, ma può calcolare con 2.
Tuttavia, questo dipende molto dal modello computazionale che utilizzerai, se ti vengono dati i processi come scatole nere o come loro descrizione che puoi interpretare da solo, ecc.