Sforzo di calcolo degli algoritmi


9

Considera il problema di ottimizzazione senza strettamente convessoLascia che x_ \ text {opt} denoti i suoi minimi unici e x_0 sia una data approssimazione iniziale di x_ \ text {opt}. Chiameremo un vettore x una soluzione \ epsilon- close di \ mathcal {O} if \ begin {equation} \ frac {|| x - x _ {\ text {opt}} || _2} {|| x_0 - x_ \ testo {opt} || _2} \ leq \ epsilon. \ end {equation}O:=minxRnf(x).xoptx0xopt.xϵO

||xxopt||2||x0xopt||2ϵ.

Supponiamo che esistano due algoritmi iterativi A1 e A2 per trovare una soluzione ϵ close di O con le seguenti proprietà:

  1. Per ogni ϵ>0, lo sforzo computazionale totale, ovvero lo sforzo richiesto per iterazione × il numero totale di iterazioni, per trovare una soluzione ϵ close è lo stesso per entrambi gli algoritmi.
  2. Lo sforzo di iterazione per A1 è O(n), diciamo, mentre quello di A2 è O(n2).

Ci sono situazioni in cui uno preferirebbe un algoritmo rispetto all'altro? Perché?

Risposte:


14

In genere è molto difficile se non impossibile implementare una versione parallela di un algoritmo iterativo che si paralellizza attraverso le iterazioni. Il completamento di un'iterazione è un punto di sequenza naturale. Se un algoritmo richiede meno iterazioni ma più lavoro per iterazione, è più probabile che questo algoritmo possa essere effettivamente implementato in parallelo.

Un esempio di ciò è la programmazione lineare, in cui il metodo della barriera primordiale doppia (punto interno) utilizza in genere solo poche dozzine di iterazioni anche per problemi molto grandi, ma il lavoro per iterazione è piuttosto esteso. In confronto, varie versioni del metodo simplex richiedono in genere molte più iterazioni, ma il lavoro per iterazione è inferiore. In pratica, le implementazioni parallele dei metodi dei punti interni hanno mostrato un'efficienza parallela molto migliore rispetto alle implementazioni parallele del metodo simplex.


7

Mi vengono in mente alcune possibilità:

Se entrambi gli algoritmi riducono monotonicamente l'errore ad ogni iterazione, allora potrebbe essere preferibile per alcuni avere più iterazioni più economiche poiché ti dà più possibilità di scegliere quando interrompere l'iterazione.

Se è lavoro e tempo ma memoria, potresti preferire se è grande. potrebbe anche essere abbastanza grande da farti selezionare poiché è più probabile che l'uso della memoria ti limiti qui.A1O(n)O(nk)A2kk=2A2

Questo probabilmente vale sia per l'ottimizzazione che per qualsiasi altra classe di problema iterativo.


Sono d'accordo con te per quanto riguarda i vincoli di spazio. Mi chiedevo se si potesse fare un caso solo sulla base della complessità temporale.
Suresh,
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.