Dikdörtgenlerle ızgara kaplaması


15

Bir ızgaramız var. Bu ızgara üzerindeki dikdörtgenlerle koleksiyonu, her dikdörtgen olarak temsil edilebilir olması , N 1 -by- K 2 ikili matris R . Izgarayı bu dikdörtgenlerle örtmek istiyoruz.N1×N2N1N2R

Bu setin karar versiyonu NP-komple problemini kapsıyor mu?

  • Girdi: Toplama ızgara üzerinde dikdörtgenler (giriş boyutu: N 1 , N 2 L ) ve K K +C={R1,R2,,RL}N1N2LKN+
  • Çıkış: | ile alt kümesi S | Her hücre için onu kaplayan en az bir dikdörtgen içeren K ve S.SC|S|KS

Sorunun görsel örneği

1D vakasının ( ) dinamik programlama ile polinom zamanda çözülebildiğini buldum : herhangi bir optimal kapak,N2=1

  • ilk hücrelerini kapsayan bazı alt problemler için en uygun kapak .N1n1
  • 1B dikdörtgen, örneğin bir aralık, geri kalan kaplama hücreleri.n1

Ancak DP'nin 2D problemi için çalışabileceğini düşünmüyorum: 1D problemi için çözmek için bir alt probleminiz var, ancak 2D için ( N 1 + N 2N1alt problemler (ızgaradaki Kuzey-Doğu kafes yollarının sayısı).(N1+N2N2)

Sorunun NP olabileceğini düşünüyorum, ama emin değilim (P'den daha zor görünse de) ve NP-tamamlanmış bir problemden (3-SAT, Vertex Cover, ...) polinom azaltımı bulmayı başaramadım.

Herhangi bir yardım veya ipucu açıktır.


3
İpucu: Vertex Cover'dan bir tarafından | V | her biri 3 x 3 blok matris elemanlarından oluşan blok ızgara. Her blok sırası bir kenara karşılık gelir ve uç nokta köşelerine karşılık gelen 2 özel olarak tasarlanmış blok içerir. Her köşe için bir yükseklik olacak- 3 | E | , bu tepe noktasına karşılık gelen 3'e 3 blok sütununun merkez sütunundan geçen genişlik-1 dikdörtgen. Nasıl herhangi bir geçerli toplamını zorlayabilir k tam maliyet -vertex örtüsü | E | ( | V | + 3 )|E||V|3|E|k ? (Başka dikdörtgenlere ihtiyacınız olacak.)|E|(|V|+3)+k
j_random_hacker

Bence bu muhtemelen bir ev ödevi alıştırmasıdır, bu yüzden şimdilik bundan çok daha fazlasını söylemeye biraz isteksizim. Verdiğim maliyet formülünde bazı ipuçları var. Birkaç dikdörtgenden en az 1 tanesini, bazı matris öğelerini kapsayan tek dikdörtgenler yaparak zorlayabileceğinizi unutmayın (1 dikdörtgenin özel durumu da yararlıdır). FWIW, ayrıca bir -by- | V | karşılık gelecek bir tepe tercih burada ızgara ilk satır "üzerinden geçiş" ve sütun karşılık gelen, ama kuvvet nasıl şekil olabilir ı zaman-inci kolon seçilecek i -inci satır tam tersi seçilir veya ters edilir. |V||V|ii
j_random_hacker

İle aynı sorunu yaşadım -by- | V | Kafes. Sanırım ne tür bir çözüme sahip olduğunuzu görüyorum (tam olarak aynı maliyet formülüne sahip değilim), düzenlememe bakın. Bu arada, bu bir ev ödevi değil. Bu gerçek yaşam mühendisliği probleminde ortaya çıkan kombinatoryal bir problem. MIP ile çözdük, ama sorunun NP olduğundan emin olmak istedim (ve polinom çözümü yoktu). Her durumda, çözümün geçerli olduğunu onaylarsanız, ipucunuzu bir cevap olarak koyabilirsiniz ve bunu doğrulayacağım (çözümü sizin yardımınızla bulduğumdan beri). |V||V|
Yann

1
Evet, neredeyse aklımdaki azalma! :) Ben "tip 4" dikdörtgenler bir ucunda biraz daha uzun yaptı: seninki bir blok içinde 2 hücre işgal, benim tüm 3 işgal. Endblocks için özel "tip 3" dikdörtgenler yerine, sadece üst satırın tamamını kullanın, sadece benzeri için dikdörtgenler "2 tip" . Sonunda her sol uç bloğunda (her bir sağ uç bloğu için yatay olarak çevrilmiş) orta sol ve sol alt hücreleri işgal eden bir dikdörtgen var. Böylece, bir veya desen kullanarak uç blokları dahil olmak üzere tüm blokların alt 2 satırını kaplayabilirsiniz . a<j<b|==|
j_random_hacker

1
Ben senin -by- 3 | V | azaltma fikri. Bununla, 3 aksine | E | -by- 3 | V | indirgeme, köşe kapaklarına karşılık gelmeyen minimum maliyetli çözümler olabilir - ancak bu tür tüm çözümler son kurşun noktanızla aynı argümanı kullanarak eşit (ly minimum) -cost çözümlerine dönüştürülebilir, bu yüzden bu değil azaltma için bir sorun :)|E|3|V|3|E|3|V|
j_random_hacker

Yanıtlar:


4

J_random_hacker'ın ipucu sayesinde, Vertex Kapağını Izgara Sorunu'na azaltmak için bir çözüm buldum:

Bir -by- | V | 3'e 3 blok ızgarası, yani 3 | E | -by- 3 | V | köşeleri { v 1 , , v N 1 } sütunları olarak sıralanan kenarlar ve { e 1 , , e N 2 } satırları olarak sıralanan ızgaralar . Bu ızgara üzerinde dikdörtgenler inşa edeceğiz (aşağıdaki çizim, kullanılan farklı dikdörtgenleri anlamada çok yardımcı olacaktır)|E||V|3|E|3|V|{v1,,vN1}{e1,,eN2}

resim açıklamasını buraya girin

|V|

(ei,vj)ei=(va,vb)

  • j<ab<j
  • j=aj=b
  • a<j<b

|E||V|

(ei,va)(ei,vb)

  • (ei,va)(ei,vb)

2|E|

Şimdi, her kenar için, tipbloklar arasında tip 4 dikdörtgenler inşa ediyoruz, ikinci satır için iki dikdörtgen var:

  • Biri ilk bloğun merkezi karesinden ikinci bloğun merkezi sol karesine gidiyor.
  • Biri ilk bloğun sağ orta köşesinden ikinci bloğun orta karesine gidiyor.
  • Üçüncü satır için de aynı iki dikdörtgen.

4|E|

Şimdi, ızgarayı örtmek için:

  • |E|(|V|+2)|V|+4|E|

Belirli bir kenar için, henüz kaplanmayan kenar uç blokları arasındaki kısmı (blok sırasının ikinci ve üçüncü satırları) kapatmak için aşağıdakilerden birini kullanabiliriz:

  • tip 4'ün dört dikdörtgeni.
  • tip 1 bir dikdörtgen ve tip 4 iki dikdörtgen.

Her durumda, tip 4'ten en az iki dikdörtgene ihtiyacımız olduğunu unutmayın.

Yani burada maliyet fonksiyonu: |E|(|V|+4)+k

  • |E|(|V|+2)

  • |E|(|V|+4)+k|E|(|V|+4)+k

|E|(|V|+6)+|V|9|V||E|

Not: Bu cevabı yazdıktan sonra, birçok dikdörtgenin aslında işe yaramaz olduğunu ve çok daha basit bir azaltmanın bir |E|3|V||V|+4|E|3|E|+k

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.