Algoritmi di approssimazione utilizzati in algoritmi esatti


11

Gli algoritmi di approssimazione potrebbero fornire output fino a un fattore costante. Questo è un po 'meno soddisfacente degli algoritmi esatti.

Tuttavia, i fattori costanti vengono ignorati nella complessità temporale.

Quindi mi chiedo se il seguente trucco è possibile o è stato usato, per risolvere qualche problema :BA

  1. Utilizzare un algoritmo di approssimazione per risolvere il problema per ottenere la soluzione S all'interno di un fattore costante;UNS
  2. Utilizzare un algoritmo esatto, risolvendo il problema , il cui tempo di esecuzione dipende dal peso di ma funziona fintanto che è una soluzione corretta.BSSS

In questo modo l'approssimazione è una "sottoprocedura" di un algoritmo esatto e il fattore costante perso nel passaggio 1 viene ingoiato nel passaggio 2.


Crosspost from math SE
sdcvvc

Chiariresti cosa intendi per e il peso di S ? BUNS
Yoshio Okamoto,

Questo è informale, per concretezza: sono problemi di ricerca , A è considerato un problema di ottimizzazione (quindi le soluzioni hanno un certo peso) e B A è una composizione di relazioni. UN,BUNBUN
sdcvvc,

Le risposte sarebbero una collezione. Quindi, penso che sarebbe più appropriato renderlo wiki della comunità.
Yoshio Okamoto

L'aggiunta del tag big-list è sufficiente, non è necessario renderlo wiki della comunità IMHO.
Gopi,

Risposte:


12

Un esempio dalla complessità parametrizzata è una kernelizzazione per il problema di copertura dei vertici usando un teorema di Nemhauser e Trotter.

Nel problema di copertura minima del vertice, ci viene dato un grafico non orientato G e dobbiamo trovare una copertura del vertice di G di dimensioni minime. Una copertura di vertici di un grafico non orientato è un sottoinsieme di vertici che tocca tutti i bordi.

Ecco un algoritmo esatto che utilizza un'approssimazione nella prima fase.

Fase 1: impostare la formulazione di programmazione lineare intera del problema di copertura minima del vertice . È noto (o facile da dimostrare) che una soluzione ottimale di base del rilassamento di programmazione lineare è semi-integrale (ovvero, ogni coordinata è 0, 1 o 1/2). Tale soluzione ottimale di base può essere trovata da un normale algoritmo a tempo polinomiale per la programmazione lineare (o in questo caso speciale, possiamo formularlo come un problema di flusso di rete, quindi possiamo risolverlo in modo combinatorio in tempo polinomiale). Avendo una soluzione ottimale di base, la arrotondiamo per ottenere una soluzione fattibile al problema della programmazione lineare intera originale. Sia S il sottoinsieme del vertice corrispondente. È bene notare che S è un'approssimazione 2 dell'istanza di copertura del vertice minimo indicata.

Fase 2: trovare una copertura minima del vertice nel sottografo indotto da S (ad esempio da una ricerca esaustiva). Un teorema di Nemhauser e Trotter afferma che questo sottografo contiene una soluzione ottimale del grafico di input originale. Quindi, la correttezza di questo approccio segue.

Puoi consultare un libro di Niedermeier sugli algoritmi a parametri fissi per questo algoritmo.


11

Un esempio è legato alle decomposizioni degli alberi e ai grafici di piccola larghezza degli alberi.

In genere, se ci viene data una decomposizione dell'albero, è abbastanza semplice applicare la programmazione dinamica per risolvere un dato problema di grafico B modo ottimaleIl tempo di esecuzione dipende dalla larghezza della decomposizione dell'albero.

Tuttavia, di solito non ci viene data una decomposizione dell'albero, ma dobbiamo trovarla. Per risolvere il problema il più velocemente possibile, vorremmo trovare una decomposizione albero del più piccolo possibile in larghezza - ora questo è il nostro problema A .BUN

Potremmo cercare di risolvere il problema esattamente, ma allora potremmo perdere troppo tempo nella parte A . Un possibile approccio è di usare un algoritmo di approssimazione per parte A . Poi parte A è più veloce, ad un costo di peggiori garanzie di tempo in esecuzione in parte B .UNUNUNUNB


Un altro esempio è relativo ai compilatori e BUN

BUNUNB


Mentre l'esempio della larghezza dell'albero funziona in linea di principio, sarebbe difficile eseguirlo in pratica perché è molto difficile approssimare la larghezza dell'albero (dal momento che puoi approssimare la cricca)
Suresh Venkat,

8

Un esempio di un algoritmo di approssimazione che converge alla soluzione esatta sarebbe l'algoritmo Ellipsoid per la risoluzione di LP - se i coefficienti sono razionali, allora si può calcolare una distanza minima tra due vertici del politipo realizzabile. Ora, l'algoritmo ellissoide calcola ripetutamente un ellissoide sempre più piccolo che deve contenere la soluzione ottimale. Una volta che l'elliposoide è abbastanza piccolo da contenere solo un singolo vertice, in pratica hai trovato il vertice ottimale. Questo è il motivo per cui LP è debolmente polinomiale.

K punti nel piano. L'algoritmo trova prima un'approvazione 2 (nel raggio), suddivide il piano in una griglia appropriata e risolve esattamente il problema all'interno di ciascun cluster di griglia, usando un algoritmo lento.

Infine, andare oltre un campo - molti algoritmi che seguono la tecnica di alterazione (prendere un campione casuale - e quindi fare alcune correzioni per ottenere ciò che si desidera) rientra in tale quadro. Un esempio carino è l'algoritmo per calcolare la mediana usando il campionamento casuale (vedi il libro di Motwani e Raghavan). Ci sono molti esempi di questo tipo - probabilmente molti degli algoritmi incrementali randomizzati in Geometria computazionale rientrano in questo framework.


4

Molti algoritmi sensibili all'output utilizzano questa tecnica. Ad esempio, ecco un semplice problema su cui è possibile utilizzare questa tecnica:

Problema . Ti viene dato un array A [1 .. n ] in cui ogni elemento è al massimo k posizioni dalla posizione in cui si sarebbe trovato se A fosse stato ordinato.

Ad esempio, A [1..7] mostrato di seguito potrebbe essere un array di input per k = 2.

Progettare un algoritmo per ordinare l'array in O ( n log k ), assumendo k sia sconosciuto.

Fonte del problema: Algo Muse Archive.

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.