Recoloring grafik bipartit


8

Diberikan grafik bipartit mana setiap simpul berwarna merah atau biru, saya mencoba untuk meminimalkan jumlah simpul biru menggunakan operasi berikut:G=(A,B,E)

  1. Pilih vertex divaA
  2. Balikkan warna , artinya dan setiap tetangga akan berubah warna.N[va]vava

Apakah ada algoritma waktu polinomial untuk memilih set recoloring yang akan meminimalkan jumlah simpul biru? Jumlah pewarnaan ulang yang diperlukan tidak relevan.XA

Perhatikan bahwa urutan membalik tidak penting, dan untuk setiap simpul dalam , Anda bisa membalik atau tidak. Kita dapat menganggap warna sebagai angka yang ditambahkan modulo 2. Ini menghasilkan algoritma sepele .AO(2|A|n)

Jawaban:


6

Masalahnya adalah NP-lengkap dan karenanya tidak mungkin mengakui algoritma waktu polinomial. Di bawah ini adalah bukti dari NP-kelengkapan masalah, yang ditunjukkan oleh pengurangan dari 1-in-3-SAT.

Biarkan menjadi instance dari 1-IN-3-SAT, di mana kita diberi formula 3-CNF-SAT yang diminta untuk menemukan tugas yang memuaskan di mana setiap klausa dipenuhi oleh tepat satu literal. Misalkan adalah himpunan variabel, dan adalah himpunan klausa .ϕV(ϕ)nC(ϕ)m

Kami membuat instance dengan anggaran (jumlah simpul biru yang diizinkan).G=(A,B,E)b=n+m

Untuk setiap variabel , buat dua simpul merah dan di bersama dengan simpul biru di berdekatan dengan keduanya. Ini memaksa salah satu dari atau untuk dibalik. Kami juga berakhir dengan membalik "simpul variabel", sehingga menggunakan bagian pertama dari anggaran.xV(ϕ)vxvx¯Ab+1Bvxvx¯n

Catatan: adalah satu-satunya simpul di .{vx,vx¯xV(ϕ)}A

Untuk setiap klausa, katakanlah , kita membuat simpul biru dan tiga simpul merah ekstra , semua di . Biarkan semuanya sepenuhnya berdekatan dengan simpul biru dan sambungkan ke , ke , dan ke .c=xy¯zb+1vxc,vy¯c,vzcBvx,vy¯,vzb+1vxvxcvyvy¯cvzvzc

gadget pengurangan

Sekarang, karena setiap gadget klausa memiliki simpul biru, kita tahu bahwa satu atau tiga literal dalam klausa tersebut telah dibalik. Misalkan tiga telah dibalik untuk salah satu klausa. Namun kami menggunakan setidaknya anggaran .b+1n+m+2

Misalkan adalah instance ya dengan penugasan 1-in-3 . Balikkan setiap simpul yang berhubungan dengan . Karena setiap klausa dipenuhi oleh tepat satu variabel, untuk setiap klausa sekarang ada satu titik biru, dan untuk setiap variabel, tepat satu dari mereka berwarna biru, maka kita memiliki simpul biru.ϕα:V(ϕ){,}αn+m=b


Pada paragraf ketiga, simpul yang ditambahkan untuk setiap masuk ke ? xXB
Luke Mathies

+1. Saya punya pertanyaan naif: mengapa setiap kelompok simpul biru mengandung 6 titik (bukan 5 = 3 + 1 + 1)?
hengxin

1
@ Hengxin Saya hanya ingin menggambar simpul biru yang "cukup". Selama setidaknya ada simpul semuanya berfungsi, tapi, ya, Anda benar. b+1
Pål GD

3

Pål GD menjelaskan bahwa masalahnya adalah NP-hard, jadi langkah selanjutnya adalah mencoba menemukan algoritma yang masuk akal untuk masalah Anda.

Saya akan perhatikan bahwa masalah Anda dapat dikurangi menjadi MINIMUM WEIGHT CODEWORD: diberi kode linier, cari kode kata dengan bobot minimum. Cara lain untuk menyatakan masalah ini adalah: dengan memberikan matriks boolean dan vektor boolean , temukan vektor boolean yang tidak nol sehingga bobot Hamming dari dapat diminimalkan. (Semua aritmatika dilakukan modulo 2.) MINIMUM WEIGHT CODEWORD dikenal sebagai NP-hard, tetapi ada beberapa algoritma untuk itu yang lebih cepat daripada brute-force.MyxMxy

Inilah hubungannya. Jika ada simpul, maka setiap vektor b-bit bit dapat dianggap sebagai menentukan simpul mana yang akan dibalik oleh operasi flip tertentu. Jadi untuk setiap vertex kita mendapatkan flip-vektor yang . Masukkan ini ke dalam matriks , di mana setiap baris berhubungan dengan vektor flip yang berbeda. Biarkan menjadi vektor b-bit bit yang menentukan warna asli dari simpul (biru = 1, merah = 0). Sekarang tujuannya adalah untuk menemukan vektor boolean yang meminimalkan berat Hammingnnvmvn×nynxMvy. Setiap vektor seperti itu segera berhubungan dengan serangkaian operasi flip yang meminimalkan jumlah simpul biru dalam grafik.

Dengan latar belakang ini, Anda mungkin dapat menerapkan algoritma yang dikenal untuk menemukan codeword bobot minimum dalam kode linier untuk masalah Anda. Waktu berjalan masih akan eksponensial, tetapi lebih cepat daripada mencoba semua kemungkinan untuk . x


Ini sebenarnya cukup lucu ketika saya mengalami ini ketika mencoba untuk menyelesaikan sistem linear mod 2. Saya tidak menyadari bahwa masalah itu disebut codeword bobot minimum. Terima kasih!
Davis Yoshida
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.