Algoritma Max-Cut yang seharusnya tidak berfungsi, tidak jelas mengapa

21

Oke, ini mungkin tampak seperti pertanyaan pekerjaan rumah dan, dalam arti tertentu, itu benar. Sebagai tugas rumah di kelas algoritma sarjana, saya memberikan klasik berikut:

Diberikan grafik tak berarah , berikan algoritma yang menemukan potongan sedemikian rupa sehingga , di mana adalah jumlah sisi yang memotong potongan. Kompleksitas waktu harus .( S , ˉ S ) δ ( S , ˉ S ) | E | / 2 δ ( S , ˉ S ) O ( V + E )G=(V,E)(S,S¯)δ(S,S¯)|E|/2δ(S,S¯)O(V+E)

Untuk beberapa alasan, saya mendapat banyak solusi berikut. Sekarang, ini memang menggunakan terlalu banyak waktu, jadi ini bukan masalah penilaian, tapi saya ingin tahu. "Kelihatannya" tidak benar, tetapi semua upaya saya pada contoh tandingan gagal. Ini dia:

  1. SetelS
  2. Biarkan menjadi simpul derajat maks dalam grafikv
  3. Tambahkan keSvS
  4. Hapus semua tepi yang berdekatan denganv
  5. Jika kembali ke 2δ(S,S¯)<|E|/2

Perhatikan bahwa dalam langkah 5 mengacu pada grafik asli. Perhatikan juga bahwa jika kita melewatkan langkah 4, ini jelas akan salah (misalnya penyatuan segitiga dengan dua sisi yang terisolasi).E

Sekarang, setiap bukti sederhana memiliki masalah berikut - mungkin ketika kita menambahkan titik kita benar-benar menghapustepi dari potongan sambil menambahkan tepi baru (di mana mengacu pada grafik dengan tepi dihapus. Masalahnya adalah, bahwa jika ini merugikan tujuan kita, itu berarti bahwa "dulu" memiliki tingkat yang lebih tinggi, jadi "seharusnya" dipilih sebelumnya.v|S|d(v)d(v)v

Apakah ini algoritma yang terkenal? Apakah ada contoh tandingan sederhana untuk itu?

Yonatan
sumber
2
Itu terlihat mirip dengan 2-pendekatan untuk penutup simpul. Algoritma serakah yang benar saya pikir akan memilih titik dengan lebih banyak tetangga di bagian itu adalah bahwa di bagian lain dan memindahkannya sampai tidak ada titik seperti itu dan tidak sulit untuk menunjukkan bahwa pada titik itu jawabannya setidaknya . Tetapi kebenaran dari algoritma itu tergantung pada fakta bahwa: kita melihat perbedaan antara jumlah tetangga untuk vertex di dua sisi potongan dan bukan hanya tingkat maks. Juga benar algoritma bergerak simpul di kedua arah, bukan hanya dari ke . ˉ S S|E|/2S¯S
Kaveh
3
@ Kaveh Saya pikir OP tahu algoritma yang Anda gambarkan (ia menugaskannya sebagai pekerjaan rumah). Pertanyaannya adalah apakah algoritme yang ia gambarkan mencapai perkiraan apa pun.
Sasho Nikolov
2
@ MohammadAl-Turkistany lihat komentar Nikolov.
vb le
1
Juga, perhatikan bahwa perkiraan 16/17 adalah NP-hard, bukan 1/2. GW memberikan ~ 0,878 pendekatan menggunakan SDP dalam makalah seminal mereka.
Yonatan
1
@Yonatan Lihat pertanyaan ini cstheory.stackexchange.com/questions/3846/…
Mohammad Al-Turkistany

Jawaban:

13

Klaim saya sebelumnya dari tidak memperhitungkan potongan ukuran sudah ada dalam grafik. Konstruksi berikut ini muncul sebagai hasil (secara empiris - Saya telah membuat pertanyaan di math.stackexchange.com untuk bukti yang kuat) dalam fraksi . n2/4O(12c+6n2/4O(1logc)

Algoritme berkinerja buruk di serikat beberapa grafik lengkap, ukuran terputus berbeda. Kami menunjukkan grafik lengkap pada simpul sebagai . Pertimbangkan perilaku algoritma pada : itu berulang kali menambahkan titik sembarang belum dalam ke - semua simpul tersebut adalah identik dan jadi urutannya tidak masalah. Mengatur jumlah simpul yang belum ditambahkan ke oleh algoritma , ukuran potongan pada saat itu adalah .K n K n S S S | ˉ S | = k k ( n - k )nKnKnSSS|S¯|=kk(nk)

Pertimbangkan apa yang terjadi jika kita menjalankan algoritma pada beberapa grafik terputus dengan konstanta antara 0 dan 1. Jika adalah jumlah elemen yang belum dalam dalam grafik lengkap ke- , maka algoritma tersebut akan berulang kali menambahkan sebuah simpul ke dari grafik lengkap dengan tertinggi , memutus ikatan secara sewenang-wenang. Ini akan menginduksi penambahan simpul berbasis `bulat 'ke : algoritme menambahkan simpul dari semua grafik lengkap dengan tertinggi , kemudian dari semua grafik lengkap dengan (dengan x i k i S i S k i S k = k i k i = k - 1 k i SKxinxikiSiSkiSk=kiki=k1kidiperbarui setelah ronde sebelumnya), dan seterusnya. Setelah grafik lengkap memiliki simpul yang ditambahkan ke dalam satu putaran, itu akan melakukannya untuk setiap putaran sejak saat itu.S

Biarkan menjadi jumlah grafik lengkap. Biarkan dengan menjadi pengubah ukuran untuk grafik lengkap ke- . Kami memesan pengubah ukuran ini dari besar ke kecil dan mengatur . Kita sekarang memiliki bahwa jika ada grafik dengan elemen persis belum ditambahkan ke , maka ukuran pemotongan pada waktu itu adalah . Jumlah total tepi adalah .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

Perhatikan bahwa adalah fungsi kuadratik dalam dan karenanya memiliki maksimum. Karena itu kami akan memiliki beberapa pemotongan maksimal secara lokal. Misalnya, jika potongan maksimal kami adalah pada dengan ukuran . Kita akan memilih sehingga , yang berarti grafik lengkap kedua tidak akan mengubah ukuran pemotongan maksimal lokal ini di . Kami kemudian mendapatkan potongan maksimal lokal baru di dan jadi kami memilih (dengan 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εε,ε,εkonstanta kecil). Kami akan mengabaikan s untuk saat ini dan anggap saja kami dapat memilih - kami harus memastikan , tetapi ini tidak akan mempengaruhi hasil akhir jika adalah cukup besar.εx1=1/2nx1n=n21n

Kami ingin menemukan maksimum lokal dari pemotongan kami. Kami membedakan hingga , menghasilkan . Menyamakan dengan menghasilkan , yang memberikan potongan ukuran . 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

Biarkan menjadi ditentukan dalam paragraf sebelumnya jika . Kami akan memastikan bahwa formula berlaku dengan menuntut bahwa - semua grafik lengkap dengan kemudian lebih kecil daripada dari potongan maksimum lokal ini dan karenanya tidak menambah ukuran potongan. Ini berarti kami memiliki potongan pada ini yang lebih besar dari semua potongan lain yang ditemukan oleh algoritma. k c = i x i n < k i i i > i k i c k ikikc=ixin<kiii>ikicki

Mengisi , kita mendapatkan perulangan (ditambah beberapa kecil ) dengan . Memecahkan hasil ini : lihat pertanyaan saya di math.stackexchange.com untuk derivasi oleh @Daniel Fisher. Memasukkan ini ke dan menggunakan wawasan kita tentang perulangan memberi kita potongan ukuran . Menggunakan properti dari koefisien binomial pusat ini , kami milikix i = 1xin<kiεx0=1xi= ( 2 ixi=12ci=0c1xiεx0=1 n2xi=(2ii)4in2n24c(i=0c1xi)2limcc( ( 2 c n24c(2c(2cc)4c)2=n2c((2cc)4c)2limcc((2cc)4c)2=1π (juga lihat pertanyaan saya di math.stackexchange.com ).

Jumlah tepi kira-kira . Berdasarkan properti yang dikenal, kita memiliki . Pengarsipan memberikan setidaknya yang asimptotik ketika pergi ke tak terbatas.n22i=0c1xi2=n22i=0c1((2ii)4i)2 n214i(2ii)4i n2n22i=0c1(14i)2=n28i=0c11icn28logcc

Karenanya, kami memiliki secara asimptotik sama dengan saat berjalan hingga tak terbatas, menunjukkan bahwa algoritme dapat potongan kembali yang merupakan fraksi rendah sewenang-wenang dari.8δ(S,S¯)|E| c| E|8πlogcc|E|

Alex ten Brink
sumber
3
Dengan sedikit modifikasi, konstruksi Anda memberi . Perbaiki dan pilih cukup besar . Biarkan . Hubungkan setiap dua simpul di dengan tepi; kemudian, sambungkan juga setiap dua simpul di wp . Jumlah total tepi kira-kira . Algoritma menemukan potongan yang memotong kira-kira tepi (hingga istilah urutan yang lebih rendah di ). ε1/4εV = { 1 , ... , N } { 1 , ... , ε N } V ε 2 ( ε n ) 2 / 2 + ε 2( n 2 / 2 ) = ε 2 n 2 ε 2 n 2 / 4 εNV={1,,N}{1,,εN}Vε2(εn)2/2+ε2(n2/2)=ε2n2ε2n2/4ε
Yury
Saya pikir saya akan menulis ulang jawaban saya untuk hanya memasukkan hasil akhir (dengan lebih detail) segera, karena ini sedikit berantakan sekarang.
Alex ten Brink
1
Mengenai jumlah , karena masing-masing istilah adalah , jumlahnya adalah seri harmonik yang menjumlahkan ke , dan secara total kita mendapatkan . Θ(1/(i+1))Θ(logc)Θ(n2logc)n22i=0c1((2ii)4i)2Θ(1/(i+1))Θ(logc)Θ(n2logc)
Yuval Filmus
12

Setelah beberapa saat berpikir dan bertanya-tanya, inilah contoh tandingan, dari Ami Paz :

Biarkan menjadi genap dan menjadi grafik yang merupakan gabungan dari dengan pencocokan simpul (yaitu pencocokan dengan tepi ).G K n n + 2 n / 2 + 1nGKnn+2n/2+1

Bagaimana algoritme berjalan pada grafik ini? Hanya perlu simpul dari bagian klik dalam urutan acak. Setelah mengambil dari clique, potongannya berukuran . Ini maksimal untuk , yang memberikan potongan ukuran , sedangkan jumlah tepi dalam grafik adalah .k ( n - k ) k = n / 2 n 2kk(nk)k=n/2 n2n24n22+1

Algoritme seperti yang ditentukan akan terus menambahkan simpul dari klik, mengurangi jumlah tepi melintasi memotong, sampai apa yang tersisa dari klik hanya satu sisi. Pada titik ini ia tidak dapat memperoleh yang lebih baik dari .n2+2

Yonatan
sumber
1
Contoh tandingan yang bagus.
Kaveh
ini masih sangat dekat dengan sekalipun. alangkah baiknya untuk melihat contoh di mana algoritma tidak lebih buruk|E|/2
Sasho Nikolov