Salah satu pendekatan untuk memecahkan masalah ini adalah dengan menggunakan integer linear programming (ILP). Mari kita menangani versi keputusan dari masalah: mengingat , apakah ada cara untuk mengontrak simpul dengan warna yang sama untuk mendapatkan DAG ukuran ≤ k ?k≤k
Ini dapat dinyatakan sebagai instance ILP menggunakan teknik standar. Kami diberi warna setiap simpul dalam grafik asli. Saya menyarankan agar kita memberi label pada setiap simpul dengan label pada ; semua simpul dengan label yang sama dan warna yang sama akan dikontrak. Jadi, masalah keputusan menjadi: apakah ada pelabelan, sehingga membuat kontrak semua simpul dengan label yang sama warnanya menghasilkan DAG?{ 1 , 2 , ... , k }
Untuk menyatakan ini sebagai program linear integer, perkenalkan variabel integer untuk setiap vertex v , untuk mewakili label pada vertex v . Tambahkan ketimpangan 1 ≤ ℓ v ≤ k .ℓvvv1 ≤ ℓv≤ k
Langkah selanjutnya adalah menyatakan persyaratan bahwa grafik yang dikontrak haruslah DAG. Perhatikan bahwa jika ada pelabelan formulir yang tercantum di atas, tanpa kehilangan keumuman ada pelabelan di mana label menginduksi semacam topologi pada grafik yang dikontrak (yaitu, jika mendahului w dalam grafik yang dikontrak, maka label v 's lebih kecil dari label w ). Jadi, untuk setiap tepi v → w dalam grafik asli, kami akan menambahkan batasan bahwa v dan w memiliki label dan warna yang sama, atau label v lebih kecil dari label w . Khususnya, untuk setiap sisi vvwvwv → wvwvw dalam grafik awal di mana v , w memiliki warna yang sama, tambahkan ketidaksetaraan ℓ v ≤ ℓ w . Untuk setiap tepi v → w di mana v , w memiliki warna yang berbeda, tambahkan ketidaksetaraan ℓ v < ℓ w .v → wv , bℓv≤ ℓwv → wv , bℓv< ℓw
Sekarang lihat apakah ada solusi yang layak untuk program linear integer ini. Akan ada solusi yang layak jika dan hanya jika pelabelan adalah dari bentuk yang diinginkan (yaitu, mengontrak semua simpul sama-warna sama label yang sama menghasilkan DAG). Dengan kata lain, akan ada solusi yang layak jika dan hanya jika ada cara untuk mengontrak grafik asli ke DAG dengan ukuran . Kita dapat menggunakan pemecah program linear integer apa pun; jika pemecah ILP memberi kita jawaban, kita punya jawaban untuk masalah keputusan semula.≤ k
Tentu saja, ini tidak dijamin selesai dalam waktu polinomial. Tidak ada jaminan. Namun, pemecah ILP sudah cukup bagus. Saya berharap bahwa, untuk grafik berukuran wajar, Anda memiliki peluang yang layak bahwa pemecah ILP mungkin dapat memecahkan masalah ini dalam jumlah waktu yang wajar.
Dimungkinkan juga untuk menyandikan ini sebagai instance SAT dan menggunakan pemecah SAT. Saya tidak tahu apakah itu akan lebih efektif. Versi ILP mungkin lebih mudah dipikirkan.
(Saya harap ini benar. Saya belum memeriksa setiap detail dengan hati-hati, jadi silakan periksa kembali alasan saya! Saya harap saya tidak pergi entah ke mana.)
Pembaruan (10/21): Sepertinya ILP dari formulir ini dapat diselesaikan dalam waktu linier, dengan memproses DAG dalam urutan yang diurutkan secara topologi dan melacak batas bawah pada label untuk setiap titik. Ini membuat saya curiga terhadap solusi saya: apakah saya membuat kesalahan di suatu tempat?