Algoritmo Max-Cut che non dovrebbe funzionare, non è chiaro il perché


21

OK, questa potrebbe sembrare una domanda a casa e, in un certo senso, lo è. Come compito a casa in una classe di algoritmi universitari, ho dato il seguente classico:

Dato un grafico non orientato , indica un algoritmo che trova un taglio tale che , dove è il numero di spigoli che attraversano il taglio. La complessità temporale deve essere .G=(V,E)(S,S¯)δ(S,S¯)|E|/2δ(S,S¯)O(V+E)

Per qualche motivo, ho ottenuto molte delle seguenti soluzioni. Ora, impiega troppo tempo, quindi non è una questione di valutazione, ma mi sono incuriosito. Non "sembra" corretto, ma tutti i miei tentativi di controesempi sono falliti. Ecco qui:

  1. ImpostareS
  2. Sia un vertice di grado massimo nel graficov
  3. Aggiungi avS
  4. Elimina tutti i bordi adiacenti av
  5. Se torna a 2δ(S,S¯)<|E|/2

Si noti che al punto 5 si riferisce al grafico originale. Si noti inoltre che se avessimo saltato il passaggio 4, ciò sarebbe ovviamente errato (ad esempio l'unione di un triangolo con due bordi isolati).E

Ora, qualsiasi semplice prova presenta il seguente problema: potrebbe essere che quando aggiungiamo un nuovo vertice realtà rimuoviamospigoli dal taglio mentre si aggiungono nuovi spigoli (dove riferisce al grafico con i bordi eliminati). Il fatto è, che se questo è dannoso per la nostra causa, significa che questo vertice "utilizzato per" avere un grado sempre più elevato, in modo che "avrebbe dovuto essere" selezionati in precedenza.| S | d ( v ) d ( v ) vv|S|d(v)d(v)v

È un algoritmo ben noto? C'è qualche semplice controesempio per questo?


2
Sembra simile all'approssimazione 2 per la copertura dei vertici. L'algoritmo corretto avido penso che sceglierebbe il vertice con più vicini nella parte è che nell'altra parte e lo sposterebbe fino a quando non c'è tale vertice e non è difficile dimostrare che a quel punto la risposta è almeno . Ma la correttezza di questo algoritmo dipende dal fatto che: stiamo osservando la differenza tra il numero di vicini per il vertice nei due lati del taglio e non solo il massimo grado. Anche la corretta algoritmo muove vertici in entrambe le direzioni, non solo da a . ˉ S S|E|/2S¯S
Kaveh,

3
@Kaveh Penso che OP conosca l'algoritmo che descrivi (lo ha assegnato come compito a casa). La sua domanda è se l'algoritmo che descrive raggiunge qualche approssimazione.
Sasho Nikolov,

2
@ MohammadAl-Turkistany vedi il commento di Nikolov.
vb le

1
Inoltre, si noti che l'approssimazione 16/17 è NP-difficile, non 1/2. GW fornisce approssimazione a ~ 0,878 usando SDP nella loro carta seminale.
Yonatan,

Risposte:


13

La mia precedente affermazione di non ha tenuto conto del taglio della dimensione già presente nel grafico. La seguente costruzione sembra risultare (empaticamente - ho creato una domanda su math.stackexchange.com per una prova rigorosa) in una frazione . n2/4O(12c+6n2/4O(1logc)

L'algoritmo funziona male sui sindacati di diversi grafici completi disconnessi, di dimensioni diverse. Indichiamo il grafico completo su vertici come . Considera il comportamento dell'algoritmo su : aggiunge ripetutamente un vertice arbitrario non ancora in a - tutti questi vertici sono identici e quindi l'ordine non ha importanza. Impostazione del numero di vertici non ancora aggiunti ad dall'algoritmo , la dimensione del taglio in quel momento è .K n K n S S S | ˉ S | = k k ( n - k )nKnKnSSS|S¯|=kk(nk)

Considera cosa succede se eseguiamo l'algoritmo su diversi grafici disconnessi con costanti comprese tra 0 e 1. Se è il numero di elementi non ancora presenti in nel grafico completo, l'algoritmo aggiungerà ripetutamente un vertice su dal grafico completo con il più alto , interrompendo arbitrariamente i legami. Questo indurrà aggiunte "rotonde" di vertici a : l'algoritmo aggiunge un vertice da tutti i grafici completi con il più alto , quindi da tutti i grafici completi con (con x i k i S i S k i S k = k i k i = k - 1 k i SKxinxikiSiSkiSk=kiki=k1kiaggiornato dopo il round precedente) e così via. Una volta che un grafico completo ha aggiunto un vertice a in un round, lo farà per ogni round da quel momento in poi.S

Sia il numero di grafici completi. Sia con sia il modificatore di dimensione per l' -esimo grafico completo. Ordiniamo questi modificatori di dimensioni da grandi a piccoli e impostiamo . Ora abbiamo che se ci sono grafici esattamente elementi non ancora aggiunti a , allora la dimensione del taglio in quel momento è . Il numero totale di bordi è .0 < x i1 0 i c - 1 i x 0 = 1 c k S c - 1 i = 0 k ( x i n - k ) = k n c - 1 i = 0 ( x i ) - c k 2 | Ec0<xi10ic1ix0=1ckSi=0c1k(xink)=kni=0c1(xi)ck2|E|=i=0c1xin(xin1)2n22i=0c1xi2

Nota che è una funzione quadratica in e quindi ha un massimo. Avremo quindi diversi tagli massimi a livello locale. Ad esempio, se nostro taglio massimo è a di dimensione . Sceglieremo modo che , il che significa che il secondo grafico completo non cambierà la dimensione di questo taglio massimo localmente in . Quindi otteniamo un nuovo taglio localmente massimo a e quindi scegliamo (con k c = 1 k = nkni=0c1xick2kc=1 n2k=n2 x1x1=1/2-εk=nn24x1x1=1/2ε k=3/8n-ε'x2=3/8n-ε"ε,ε',ε"εx1=1/2x1n=nk=n2k=3/8nεx2=3/8nεε,ε,εpiccole costanti). Per il momento ignoreremo i s e supponiamo che possiamo scegliere - dovremmo assicurarci , ma ciò non influirà sui risultati finali se è abbastanza grande.εx1=1/2nx1n=n21n

Desideriamo trovare i massimi locali dei nostri tagli. Differenziamo in , producendo . Equivale a dà , che dà un taglio di dimensione . k n c - 1 i = 0 ( x i ) - 2 c k 0 k = nkni=0c1(xi)ck2kni=0c1(xi)2ck0n2k=n2ci=0c1xin24c(i=0c1xi)2

Sia la determinata nel paragrafo precedente se . Faremo in modo che la formula valga chiedendo che - tutti grafici completi con siano quindi più piccoli della di questo taglio localmente massimo e quindi non aumentino le dimensioni del taglio. Questo significa che abbiamo questi tagli in questi che sono più grandi di tutti gli altri tagli trovati dall'algoritmo. k c = i x i n < k i i i > i k i c k ikikc=ixin<kiii>ikicki

Compilando , otteniamo la ricorrenza (più alcuni piccoli ) con . Risolvendo questo risultato : vedi la mia domanda su math.stackexchange.com per la derivazione di @Daniel Fisher. Inserendolo in e usando la nostra intuizione sulla ricorrenza ci dà tagli di dimensioni . Usando le proprietà di questo coefficiente binomiale centrale , abbiamox i = 1xin<kiεx0=1xi= ( 2 ixi=12ci=0c1xiεx0=1xi=(2ii)4in2n24c(i=0c1xi)2limcc( ( 2 c n24c(2c(2cc)4c)2=n2c((2cc)4c)2limcc((2cc)4c)2=1π (vedi anche la mia domanda su math.stackexchange.com ).

Il numero di bordi è approssimativamente . Con proprietà note abbiamo . La compilazione dà almeno che è asintoticamente come va a infinito.1n22i=0c1xi2=n22i=0c1((2ii)4i)2 n214i(2ii)4i n2n22i=0c1(14i)2=n28i=0c11icn28logcc

Pertanto abbiamo è asintoticamente uguale a mentre va all'infinito, dimostrando che l'algoritmo può tagli di ritorno che sono frazioni arbitrariamente basse di.8δ(S,S¯)|E| c| E|8πlogcc|E|


3
Con una leggera modifica, la tua costruzione dà . Correggi e ha scelto un sufficientemente grande . Lascia . Collega ogni due vertici in con un bordo; quindi collegare inoltre ogni due vertici in wp . Il numero totale di bordi è approssimativamente . L'algoritmo trova un taglio che taglia approssimativamente bordi (fino ai termini di ordine inferiore in ). ε N V = { 1 , ... , N } { 1 , ... , ε N } V ε 2 ( ε n ) 2 / 2 + ε 2( n 2 / 2 ) = ε 2 n 2 ε 2 n 2 / 4 ε1/4εNV={1,,N}{1,,εN}Vε2(εn)2/2+ε2(n2/2)=ε2n2ε2n2/4ε
Yury

Penso che riscriverò la mia risposta per includere presto i risultati finali (con maggiori dettagli), dato che è un po 'un casino in questo momento.
Alex ten Brink,

1
Per quanto riguarda la somma , poiché ogni termine è , la somma è una serie armonica che somma a , e in totale otteniamo . Θ(1/(i+1))Θ(logc)Θ(n2logc)n22i=0c1((2ii)4i)2Θ(1/(i+1))Θ(logc)Θ(n2logc)
Yuval Filmus,

12

Dopo un po 'di pensieri e domande, ecco un contro-esempio, per gentile concessione di Ami Paz :

Sia pari e sia un grafico che è l'unione di con una corrispondenza di vertici (ovvero una corrispondenza con bordi).G K n n + 2 n / 2 + 1nGKnn+2n/2+1

Come funziona l'algoritmo su questo grafico? Prende solo i vertici dalla parte della cricca in ordine arbitrario. Dopo aver preso vertici dalla cricca, il taglio è della dimensione . Questo è massimo per , che fornisce un taglio di dimensione , mentre il numero di spigoli nel grafico è .kk = n / 2 n 2k(nk)k=n/2 n2n24n22+1

L'algoritmo come prescritto continuerà ad aggiungere vertici dalla cricca, riducendo il numero di spigoli che attraversano il taglio, fino a quando ciò che rimane della cricca è solo un singolo spigolo. A questo punto non può ottenere niente di meglio di .n2+2


1
Bel controesempio.
Kaveh,

questo comunque si avvicina molto a . sarebbe bello vedere un esempio in cui l'algoritmo peggiora|E|/2
Sasho Nikolov,
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.