Kekerasan NP dari spesialisasi Set Cover

8

Apakah masalah berikut NP-hard?

Diberikan satu set bilangan real (target) x 1 , , x N dan "trisula" yang didefinisikan oleh dua jarak a , b dari pusat trisula, berapakah angka minimum K dari posisi p 1 , ... , p K dari trisula untuk mencakup semua target, yaitu K k = 1 { p k - a , p k , p k + b } { xNx1,,xNabKp1,,pK

k=1K{pka,pk,pk+b}{x1,,xN}.

Jelas, ini adalah kasus khusus dari masalah cover set : Mempertimbangkan semua set , dengan p k{ x n + t n { 1 , , N } , t { a , 0 , - b } }{pka,pk,pk+b}pk{xn+tn{1,,N},t{a,0,b}}mewakili semua posisi potensial "relevan", kami mencari jumlah set minimum yang meliputi alam semesta . Secara ekivalen, kita dapat merepresentasikan masalah sebagai grafik bipartit dari posisi dan target node dan mempertimbangkan masalah hitting set .{x1,,xN}

Perhatikan bahwa masalahnya bukan NP-keras jika trisula kehilangan salah satu dari "jags" -nya: Kemudian setiap target dapat dicakup dari 2 posisi dan setiap posisi mencakup paling banyak 2 target, sehingga grafik bipartit yang sesuai dari posisi potensial dan target adalah penyatuan jalan. Di setiap jalur, mudah untuk menentukan set pukulan minimal (yaitu, simpul posisi bagian dalam).

Tetapi, apakah trisula NP-hard?

Jan Pöschko
sumber
4
Saya akan menganggap ini bisa dilakukan dalam waktu polinomial menggunakan pemrograman dinamis. Sudahkah Anda mencobanya?
James King
Saya memang berusaha pemrograman dinamis, saya hanya tidak berhasil dengan itu. Masalahnya adalah bahwa posisi dapat dihubungkan satu sama lain melalui target sepanjang jalan (pikirkan banyak target dengan jarak a dan b), sehingga mengubah satu target dapat memiliki efek "global". Ini membuat sulit untuk membagi masalah atau mengurangi kasus satu target / posisi lebih ke kasus sebelumnya. Di sisi lain, sifat "lokal" tentang bagaimana posisi dihubungkan satu sama lain tidak memungkinkan pengurangan yang mudah dari mis. Set Cover. Perasaan saya masih mengatakan bahwa masalahnya adalah NP-hard, tapi saya benar-benar tidak yakin.
Jan Pöschko
1
x1xixi
@ James: Saya takut bahwa saya benar-benar kehilangan sesuatu, tetapi tidakkah Anda juga harus membedakan mana dari poin x_ {i + 1}, ..., x_N "tidak sengaja" ditutupi oleh trisula yang digunakan sejauh ini?
Tsuyoshi Ito
@ TsuyoshiIto Ya pasti. Saya hanya memberi sedikit petunjuk. Anda harus memeriksa hal-hal seperti itu ketika mengisi array, tetapi itu hanya membutuhkan waktu yang konstan per poin.
James King

Jawaban:

2

Gambaran

kxi

Untuk membuktikan bahwa Numerical Trident Cover Problem adalah NP-hard, kami memperkenalkan masalah perantara berikut, yang kami sebut Masalah Penutup Segitiga Kotak:

SZ+×Z+k

TZ×Z|T|kS(x,y)T{(x,y),(x,y+1),(x+1,y)}

k(1,1,2)(x,y)(x,y+1)(x+1,y)

Untuk menunjukkan bahwa Numerical Trident Cover adalah NP-hard, kami menyediakan dua pengurangan: pengurangan dari Planar 3SAT ke Grid Triangle Cover dan pengurangan dari Grid Triangle Cover ke Numerical Trident Cover. Bersama-sama, ini menyusun pengurangan dari masalah NP-hard Planar 3SAT ke masalah Numerical Trident Cover, menyiratkan bahwa Numerical Trident Cover adalah NP-hard.

p+q2p+q2(p,q)

Pengurangan 1: Dari Penutup Segitiga Kotak ke Penutup Trisula Numerik.

SZ+×Z+k

x1,...,xNa,bk

Ss1=(p1,q1),s2=(p2,q2),...,s|S|=(p|S|,q|S|)i1N=|S|xi=pi+qi2a=1b=2k=k

Pengurangan ini jelas merupakan operasi waktu polinomial, jadi satu-satunya hal yang tersisa untuk ditunjukkan adalah bahwa pengurangan adalah pengawetan jawaban.

xixixi+axibxiva+vb2vavbva+vb2fp+q2f(va+vb2)=(va,vb)fxisi

p+q2(p+1)+q2p+q2p+(q+1)2f(p,q)(p+1,q)(p,q+1)fSf1f

f{x1,...,x|S|}fS={s1,...,s|S|}={f(x1),...,f(x|S|)}f(1,12)xikSk(1,12)

Pengurangan 2: Dari Planar 3SAT ke Penutup Segitiga Kotak.

Untuk reduksi ini, kita diberi instance 3SAT dalam bentuk grafik bipartit planar. Verteks di satu bagian sesuai dengan variabel, dan simpul di bagian lain, masing-masing derajat 3, sesuai dengan klausa. Setiap sisi dilabeli sebagai positif atau negatif, menunjukkan ke arah mana variabel dimasukkan ke dalam klausa (positif atau negatif).

(S,k)Sk

Pertama kita menggambarkan sebuah kawat. Sebuah kawat terdiri dari urutan sejumlah titik ganjil (dalam kisi integer) di mana yang pertama dan terakhir disebut terminal sehingga setiap pasangan berturut-turut dapat ditutupi oleh segitiga tanpa segitiga memukul titik lain di kawat. Sebagai contoh, pertimbangkan kawat berikut:

xoo       x
   o       o
   o ooo   o
   o o  oooo
    oo

pp+12

Di sini kami menunjukkan dua cara untuk menutupi contoh dari atas (di mana dua titik diberi label nomor yang sama jika mereka dicakup oleh segitiga yang sama):

x11       9
   2       9
   2 556   8
   3 4  6778
    34

atau

112       x
   2       9
   3 566   9
   3 5  7788
    44

Satu kekhawatiran adalah bahwa kita mungkin ingin menghubungkan dua terminal dengan kawat tetapi tidak dapat melakukannya karena "kawat" antara kedua terminal tersebut akan memiliki panjang genap. Namun, bukan itu masalahnya: kita selalu dapat memilih rute untuk kawat yang membuat kawat itu memiliki panjang ganjil (dan karenanya menjadi kawat yang valid). Mengganti setiap segmen horisontal dari kawat dengan panjang 6 dengan panjang 7 segmen kawat berikut dapat memperbaiki paritas panjang kawat:

oo  oo
  ooo 

Selanjutnya kami memperkenalkan gadget klausa. Klausa hanya menghubungkan salah satu terminal dari tiga kabel sedemikian rupa sehingga jika salah satu kabel puas sehingga terminal bersama tertutup, maka segitiga yang menutupi terminal bersama tidak mencakup titik dari kabel lain:

      o
      o
      o
   ooox
       ooo

Agar terminal bersama dapat ditutup, setidaknya satu dari tiga kabel harus memenuhi sedemikian rupa sehingga segitiga yang memuaskan kawat tidak menutupi terminal kabel yang tidak digunakan bersama.

Akhirnya, kami memperkenalkan gadget variabel. Gadget variabel adalah loop besar seperti kawat (dengan panjang genap) dengan terminal secara opsional muncul ke samping setiap tiga baris sebagai berikut:

oo
o o
o ox
o o
o o
o ox
o o
o o
o ox
o o
o o
o ox
o o
 oo

Variabel dapat tumbuh secara vertikal untuk mengakomodasi jumlah terminal yang diperlukan. Terminal pada baris paritas genap sesuai dengan kejadian positif dari variabel dan variabel pada baris paritas ganjil sesuai dengan kejadian negatif. Seperti halnya kawat, titik-titik non-terminal dari gadget variabel dapat dipenuhi menggunakan jumlah minimum segitiga (setengah jumlah titik dalam loop) tepat dalam dua cara. Kedua pengaturan tersebut mencakup semua terminal kemunculan positif atau semua terminal kemunculan negatif dari gadget variabel.

Menyatukan semuanya cukup jelas: kita membangun grafik bipartit menggunakan gadget variabel, gadget klausa (terminal bersama) dan kabel yang menghubungkan terminal. Jumlah total segitiga yang diperlukan untuk menutupi titik non-terminal kabel dan variabel adalah jumlah target segitiga.

Jelas kita tidak bisa menutupi seluruh grid dengan segitiga lebih sedikit dari itu. Lebih lanjut, kita dapat yakin bahwa titik-titik non-terminal masing-masing dicakup karena variabel dan kabel masing-masing akan dipenuhi dalam salah satu dari dua cara yang dijelaskan. Jadi, satu-satunya tugas adalah memuaskan terminal.

Pada setiap variabel, semua terminal positif atau semua terminal negatif akan dipenuhi oleh gadget variabel. Terminal lain di gadget harus puas dengan kabel yang terpasang. Kemudian terminal klausa dapat dipenuhi jika dan hanya jika setiap klausa dilampirkan pada setidaknya satu kawat yang terminal lainnya belum menggunakan kawat (kawat yang terminal lainnya dipenuhi oleh gadget variabel terlampir). Dengan kata lain, terminal semua puas jika dan hanya jika penugasan variabel sesuai dengan pengaturan gadget variabel memenuhi setiap klausa.

Seperti yang Anda lihat, instance Grid Triangle Cover yang dihasilkan adalah instance ya jika dan hanya jika instance input Planar 3SAT adalah instance ya. Karena pengurangan ini juga merupakan waktu polinomial (semua gadget memerlukan polinom ruang dalam ukuran instance input), kami menyimpulkan bahwa kami memiliki reduksi yang valid.

Mikhail Rudoy
sumber