Algoritmo Max-Cut que não deve funcionar, não está claro por que

21

OK, isso pode parecer uma pergunta de lição de casa e, em certo sentido, é. Como tarefa de lição de casa em uma aula de algoritmos de graduação, dei o seguinte clássico:

Dado um gráfico não direcionado G=(V,E) , forneça um algoritmo que encontre um corte (S,S¯) tal que δ(S,S¯)|E|/2 , onde δ(S,S¯) é o número de arestas que cruzam o corte. A complexidade do tempo deve ser O(V+E) .

Por alguma razão, obtive muitas das seguintes soluções. Agora, ele usa muito tempo, por isso não é uma questão de classificação, mas fiquei curioso. Não parece "correto", mas todas as minhas tentativas de contra-exemplos falharam. Aqui está:

  1. Definir S
  2. Seja v um vértice de grau máximo no gráfico
  3. Adicionar v a S
  4. Exclua todas as arestas adjacentes a v
  5. Se δ(S,S¯)<|E|/2 retornar para 2

Observe que E na etapa 5 se refere ao gráfico original. Observe também que, se pulássemos a etapa 4, isso obviamente estaria errado (por exemplo, a união de um triângulo com duas arestas isoladas).

Agora, qualquer prova simples tem o seguinte problema - pode ser que quando adicionamos um novo vértice v na verdade removemos |S|arestas do corte ao adicionar d(v) novas arestas (em que d(v) se refere ao gráfico com as arestas excluídas). O fato é que, se isso é prejudicial à nossa causa, significa que esse vértice v "costumava" ter um grau cada vez mais alto, portanto "deveria ter sido" selecionado anteriormente.

Isso é um algoritmo bem conhecido? Existe algum contra-exemplo simples para isso?

Yonatan
fonte
2
É semelhante à aproximação 2 para cobertura de vértice. O algoritmo ganancioso correto, acho que escolheria o vértice com mais vizinhos na parte, é que na outra parte e o move até que não exista esse vértice e não é difícil mostrar que, nesse ponto, a resposta é pelo menos . Mas a correção desse algoritmo depende do fato de que: estamos observando a diferença entre o número de vizinhos do vértice nos dois lados do corte e não apenas o grau máximo. Além disso, o algoritmo correto move vértices em ambos os sentidos, não apenas a partir ˉ S para S . |E|/2S¯S
Kaveh
3
@ Kaveh Eu acho que o OP conhece o algoritmo que você descreve (ele o atribuiu como lição de casa). Sua pergunta é se o algoritmo que ele descreve consegue alguma aproximação.
Sasho Nikolov
2
@ MohammadAl-Turkistany ver o comentário de Nikolov.
vb le
11
Além disso, observe que a aproximação 16/17 é NP-hard, não 1/2. GW fornece ~ 0,878 de aproximação usando SDP em seu artigo seminal.
Yonatan
11
@Yonatan Veja esta pergunta cstheory.stackexchange.com/questions/3846/…
Mohammad Al-Turkistany

Respostas:

13

Minha reivindicação anterior de não ter tido em conta o corte de tamanhon2/4já presente no gráfico. A seguinte construção parece resultar (empericamente - eu criei uma pergunta em math.stackexchange.com para obter uma prova rigorosa) em umO(12c+6n2/4fração.O(1logc)

O algoritmo tem um desempenho ruim em uniões de vários gráficos completos desconectados e de tamanhos diferentes. Denotamos o gráfico completo em vértices como K n . Considere o comportamento do algoritmo em K n : ele adiciona repetidamente um vértice arbitrário ainda não em S para S - todos esses vértices são idênticos e, portanto, a ordem não importa. Configurando o número de vértices ainda não adicionados a S pelo algoritmo | ˉ S | = k , o tamanho do corte naquele momento é k ( n - k ) .nKnKnSSS|S¯|=kk(nk)

Considere o que acontece se executar o algoritmo em várias desligado gráficos com x i constantes entre 0 e 1. Se k i é o número de elementos ainda não em S no i th grafo completo, em seguida, o algoritmo irá repetidamente adicionar um vértice de S a partir do gráfico completo com maior k i , quebrando laços arbitrariamente. Isso induzirá adições de vértices baseadas em `` arredondadas '' a S : o algoritmo adiciona um vértice de todos os gráficos completos com o maior k = k i , depois de todos os gráficos completos com kKxinxikiSiSkiSk=ki (com k i atualizado após a rodada anterior) e assim por diante. Quando um gráfico completo tiver um vértice adicionado a S em uma rodada, ele fará isso para cada rodada a partir de então.ki=k1kiS

Seja o número de gráficos completos. Seja 0 < x i1 com 0 i c - 1 o modificador de tamanho do i- ésimo gráfico completo. Solicitamos esses modificadores de tamanho de grande a pequeno e definimos x 0 = 1 . Agora, temos que, se houver c gráficos com exatamente k elementos ainda não adicionados a S , então o tamanho do corte nesse momento será c - 1 i = 0 k (c0<xi10ic1ix0=1ckS . O número total de arestas é | E | = c - 1 i = 0 x i n ( x i n - 1 )i=0c1k(xink)=kni=0c1(xi)ck2 .|E|=i=0c1xin(xin1)2n22i=0c1xi2

Observe que é uma função quadrática em k e, portanto, tem um máximo. Portanto, teremos vários cortes locais máximos. Por exemplo, se c = 1, nosso corte máximo é em k = nkni=0c1xick2kc=1 de tamanhon2k=n2 . Vamos escolherx1de modo queX1=1/2-ε, o que significa que o segundo gráfico completo não alterará o tamanho de este corte localmente mimo emk=nn24x1x1=1/2εk=n2k=3/8nε ε , ε ' , ε " ε x 1 = 1 / 2 x 1 n = nx2=3/8nεε,ε,εεx1=1/2nx1n=n21n

Desejamos encontrar os máximos locais de nossos cortes. Diferenciamos para , produzindo . Igualar a dá , que fornece um corte de tamanho . 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

Seja o determinado no parágrafo anterior se . Garantiremos que a fórmula seja exigindo que - todos os gráficos completos com sejam menores que o desse corte local máximo e, portanto, não aumentem o tamanho do corte. Isso significa que temos cortes nesses que são maiores que todos os outros cortes encontrados pelo algoritmo. k c = i x i n < k i i i ' > i k i c k ikikc=ixin<kiii>ikicki

Preenchendo , obtemos a recorrência (mais alguns pequenos ) com . Resolver isso gera : veja minha pergunta em math.stackexchange.com para obter a derivação de @Daniel Fisher. Conectando isso a e usando nossa percepção da recorrência nos dá cortes de tamanho . Usando propriedades deste coeficiente binomial central , temosx i = 1xin<kiεx0=1xi= ( 2 ixi=12ci=0c1xiεx0=1 n2xi=(2ii)4in2n24c(i=0c1xi)2n24c(2c(2cc)4c)2=n2c((2cc)4c)2limcc((2cc)4c)2=1π (veja também minha pergunta em math.stackexchange.com ).

O número de arestas é aproximadamente . Por propriedades conhecidas , temos . A apresentação fornece pelo menos que é assintoticamente conforme vai para infinidade.1n22i=0c1xi2=n22i=0c1((2ii)4i)2 n214i(2ii)4i n2n22i=0c1(14i)2=n28i=0c11icn28logcc

Portanto, temos é assintoticamente igual a conforme vai para o infinito, mostrando que o algoritmo pode cortes de retorno que são frações arbitrariamente baixas de.8δ(S,S¯)|E| c| E|8πlogcc|E|

Alex ten Brink
fonte
3
Com uma ligeira modificação, sua construção dá . Corrija e escolha um suficientemente grande . Seja . Conecte a cada dois vértices em com uma aresta; conecte adicionalmente a cada dois vértices em wp . O número total de arestas é aproximadamente . O algoritmo encontra um corte que corta aproximadamente arestas (até termos de ordem inferior em ). ε 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
Acho que vou reescrever minha resposta para incluir apenas os resultados finais (com mais detalhes) em breve, pois está um pouco bagunçado no momento.
precisa
11
Em relação à soma , uma vez que cada termo é , a soma é uma série harmônica que soma e, no total, obtemos . Θ(1/(i+1))Θ(logc)Θ(n2logc)n22i=0c1((2ii)4i)2Θ(1/(i+1))Θ(logc)Θ(n2logc)
Yuval Filmus
12

Depois de um tempo pensando e perguntando, aqui está um contra-exemplo, cortesia de Ami Paz :

Seja igual e seja um gráfico que é a união de com uma correspondência de vértices (isto é, uma correspondência com arestas).G K n n + 2 n / 2 + 1nGKnn+2n/2+1

Como o algoritmo é executado neste gráfico? Leva apenas vértices da parte da clique em ordem arbitrária. Depois de extrair vértices da clique, o corte é do tamanho . Isso é máximo para , que fornece um corte de tamanho , enquanto o número de arestas no gráfico é .k ( n - k ) k = n / 2 n 2kk(nk)k=n/2 n2n24n22+1

O algoritmo conforme prescrito continuará adicionando vértices da clique, reduzindo o número de arestas cruzando o corte, até que o que resta da clique seja apenas uma única aresta. Neste ponto, ele não pode obter nada melhor que .n2+2

Yonatan
fonte
11
Bom contra-exemplo.
Kaveh
isso ainda fica muito próximo de . seria bom ver um exemplo em que o algoritmo se sai pior|E|/2
Sasho Nikolov