SORU
8 Mart 2013, Cuma


Bomba bırakarak algoritması

n x m bir matrisin negatif olmayan tamsayılar oluşan var. Örneğin:

2 3 4 7 1
1 5 2 6 2
4 3 4 2 1
2 1 2 4 1
3 1 3 4 1
2 1 4 3 2
6 9 1 6 4

"Bomba bırakarak" bir hedef hücre sayısı ve komşusu sekiz azalır, sıfır en az.

x x x 
x X x
x x x

Sıfır bombalar tüm hücreleri azaltmak için gereken en az sayıda belirleyecek bir algoritma nedir?

B Seçeneği (me Nedeniyle dikkatli bir okuyucu olmak

Aslında sorun ilk sürümü için cevap arayan ben değil. Dikkatle tüm görev okumadım, ek kısıtlamaları var, diyelim ki:

Satır sıra dışı artan zaman ne basit sorun hakkında,:

8 7 6 6 5 Olası giriş sırası

7 8 5 5 2 7 - ^ beri mümkün değildir . Bir dizi 8 büyüyor.

Belki bulma "kolay" olgu bulma çözümünde yardımcı zor bir olur. cevap

PS:Birkaç aynı durumlar minimum bombalar üst satırı temizlemek için ihtiyacımız var, "yan bu satır. Sol tarafta en bomba kullanan bir seçim olduğuna inanıyorum Doğru olduğunu gösteren herhangi bir kanıt hala?

CEVAP
9 Mart 2013, CUMARTESİ


Alt-sorun basit bunu azaltmak için bir yol var.

Açıklama 2 parça, algoritma ve algoritma sebebi vardır sağlar en iyi çözüm. İlk bahsedeceğim ikinci olmadan anlam ifade etmeyecek neden ile başla.

Eğer bombalama dikdörtgen (büyük bir dikdörtgen - kenar durumlarda henüz varsayıyorum) düşünüyorsanız ... Bu karelerin içi boş dikdörtgen azaltmanın tek yolu görebilirsiniz 0 çevre ya da bölgeyi bombalamaya ya da içi boş dikdörtgen bomba için. sınırı içinde kareler. Çevre 1, ve içindeki dikdörtgen katman 2 katman ararım.

Önemli bir fikir bombalama katman çünkü 1, nokta yok yani "blast radius" her zaman patlama alanı içinde yer alıyor bunu yaparken aldığım katman 2'den bir kare. Kolayca bu kendinizi ikna etmek gerekir.

Bu yüzden, çevreyi bombala için en iyi yol bulma sorunu azaltabiliriz, sonra tüm kareler 0 kadar tekrar edebiliriz.

Ama tabii ki, her zaman, mümkünse bomba için en uygun çözüm bulamaz uzak kullanarak, az en uygun bir şekilde, ama çevreyi X ekstra bombalar olun iç tabaka ^ tarafından basit azaltılması sorunu . X bomba. Eğer ararsak, eğer bir yerde katman 2'de fazladan bir X bomba koyarsanız permiter katmanı, (sadece iç katman 1), Daha sonra uzakta daha fazla katman 2 bombalama çaba azaltabilir miyiz X? Diğer bir deyişle, dış azaltmada açgözlü olabiliriz kanıtlamak zorunda çevre.

Ama, açgözlü olabiliriz. Katman 2 bomba daha olabilir çünkü katman 3 stratejik olarak yerleştirilmiş bir bomba daha 0 Kat 2 azaltmada etkili. Ve aynı nedenden ötürü - her zaman katman 3'te yer bir bomba olduğunu daha önce olduğu gibi bir bomba yerleştirilmiş katman 2 katman 2 her kare etkileyecektir. Yani, olabilir bizi asla açgözlü (greedy bu anlamda) zarar.

Yani tek yapmamız gereken bombalayarak 0 permiter azaltmak için en iyi yolu bulmak. bir sonraki iç tabaka.

Biz hiçbir zaman zarar ilk bombalama köşeye 0, çünkü tek köşe iç katman ulaşabilir, bu yüzden gerçekten hiçbir seçim (ve, herhangi bir bomba üzerinde çevreyi şu ulaşabilir köşede bir patlama yarıçapı yer alan blast radius köşe iç tabaka).

Yani bunu yaptıktan sonra, çevreyi 0 köşesine bitişik kareler sadece iç tabaka 2 kareler ile ulaşılabilir:

0       A       B

C       X       Y

D       Z

Bu noktada çevreyi herhangi bir bomba 3 bitişik kareler azaltacaktır çünkü etkili bir şekilde kapalı 1 boyutlu bir döngü. Köşelere yakın bazı gariplikler hariç - X "hit" A,B,C ve D

Şimdi her kare durumu simetriktir herhangi bir patlama yarıçapı hileler kullanın yapamayız, tuhaf köşeler hariç, orada bile hiçbir patlama yarıçapı başka bir alt kümesidir. Eğer bu bir çizgi (Albay Panik anlatılır gibi) kapalı bir döngü yerine olsaydı çözüm önemsiz olduğunu unutmayın. 0, ama hiç puan kısmının yanındaki bomba zararları aza indirilmiş olmalıdır patlama yarıçapı bir üst olduğundan, yine puan. Sonra bitiş 0, hala yeni bir bitiş noktası var, bu yüzden tekrar tüm hat 0 kadar) yaptık.

Yani, eğer en iyi şekilde 0 katmanda tek bir kare azaltabiliriz eğer bir algoritma var döngü kestik ve bitiş noktaları ile düz bir çizgi var artık çünkü). İnanıyorum bombalama bitişik kare ile en düşük değeri (verdiğiniz 2 seçenek) gibi en yüksek değer içinde 2 kare en düşük değer, minimum (varsa split bombalama için yönetmek Bu) optimal ama bilmiyorum (henüz?) bir kanıt var.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Paul Schroder

    Paul Schrode

    30 Kasım 2007
  • POGProductionz

    POGProductio

    27 NİSAN 2012
  • Willie D.

    Willie D.

    16 Aralık 2006