Çift Ağırlık Parametreleri ile Minimal Kapsama Ağacı


12

Bir grafik düşünün . Her kenar iki ve ağırlığı vardır . en aza indirgeyen bir ağaç bulun . Algoritma.e A e B e ( e T A e ) ( e T B e ) | V | , | E |G,(V,E)ebireBe(eTAe)(eTBe)|V|,|E|

Yayılan ağaçlarda (Kruskal, Prim, Edge-Deletion) geleneksel algoritmaların herhangi birini uyarlamakta zorlanıyorum. Nasıl çözeceksin? İpucu var mı?


emax(Ae,Be)

3
Bu bir ev ödevi problemi / alıştırması mı? Öyleyse, bir ders kitabından mı? Sormamın nedeni, bağlamın sorunu "tersine mühendislik" etmeye yardımcı olabilmesidir. Burada açgözlü bir algoritmanın uygun olduğu hemen belli değil, ama açgözlü algoritmalar bölümünden geliyorsa ...
Joe

1
@utdiscant, bu işe yaramaz. Negatif kenarlar faydalı olabilir.
Nicholas Mancuso

pozitif kenarlar için bile yararlı değildir, örneğin çoğu durumda çift (10,10) çiftten (11,1) daha iyi değildir.

Yanıtlar:


1

Size negatif ağırlıklı kenarlar verilmediğini varsayacağım, çünkü negatif ağırlıklar varsa bu işe yaramayabilir.

Algoritma

Kenarlarınızın her biri için ila etiketleyinn1n

Kenar numarası ağırlığı A olsun benbirbenben

Kenar numarası ağırlığı B olsun benbbenben

Bu tabloyu hazırla

   |a_1 a_2 a_3 a_4 .. a_n
---+-------------------------
b_1|.........................
b_2|.........................
 . |.........................
 . |.........................
b_n|...................a_n * b_n

Tablo öğelerinin her biri satır ve sütunun ürünüdür.

Her kenar için, ilgili tablo satırını ve sütununu toplayın (ve iki kez toplandığından kesişimdeki öğeyi kaldırmayı unutmayın).

En büyük toplamı olan kenarı bulun, grafiğin bağlantısını kesmezse bu kenarı silin. Aksi takdirde kenarı işaretleyin. Bir kenar silinmişse, satırlarını ve sütunlarını 0 ile doldurun.

doğruluk

Sonuç açıkça bir ağaçtır.

Hiçbir köşenin bağlantısı kesilmediği için sonuç açıkça değişiyor.

Sonuç minimal mi? Silme işlemi algoritmanın sonunda daha küçük bir yayılan ağaç oluşturacak başka bir kenar varsa, önce o kenar silinir ve geçersiz olur. (eğer birisi bunu biraz daha titiz / ve / veya karşı örnek yapmama yardımcı olabilirse, bu harika olurdu)

Çalışma süresi

Açıkça polinom.|V|

Düzenle

(2,11),(11,2),(4,6) bir değil, bir karşı, örneğin.

a1=2,a2=11,a3=4

b1=11,b2=2,b3=6

Sonra

   | 2     11     4
---+--------------------
11 | 22    121    44
 2 | 4     22     8
 6 | 12    66     24

(4,6)=44+8+24+66+12=154(2,11)=22+4+12+121+44=203(11,2)=121+22+66+4+8=221

(11,2) kaldırılır.

İle sonuna kadar(2,11),(4,6)=617=102

Diğer yayılan ağaçlar

(11,2),(4,6)=1512=180

(2,11),(11,2)=1313=169


1
Bana öyle geliyor ki, bu oldukça açgözlü bir yaklaşım. Minimalizmin “kanıtı” ndan ikna olmadım.
Nejc

1
@SaeedAmiri Bu karşı bir örnek nasıl? Düzenlenen bölümde çalışmayı yayınladım, algoritma doğru sonucu veriyor.
Herp Derpington

1
Yaptığınız şey, her birinin ne kadar katkıda bulunduğunu ve en çok etkisi olanları seçersiniz. Bu iyi, ama gerekli olan bu değil. Bu zor bir soru. Cevabınızı iyileştirmek istiyorsanız, bir kanıt getirmeniz gerekir. Aksi takdirde faydası olmaz. e E a i . e E b i(ai,bi)eEai.eEbi
AJ

çabalarınız için aşağı oy almak çok haksızlık.
AJ

@AJed Kanıt, prim / kush / ters silme işlemiyle aynıdır. Şimdi kanıtlamamız gereken tek şey cut özelliğinin hala geçerli olduğudur.
Herp Derpington

1

Bu, http://www.cnblogs.com/autsky-jadek/p/3959446.html adresindeki çözümdür .

Her bir yayılma ağacını düzleminde bir nokta olarak görebiliriz ; burada x , e T A e , y, e T B e ağırlığının toplamıdır . Amaç x y'yi en aza indirmektir .x-yxΣeTbireΣeTBexy

  1. ağırlığına ve B ağırlığına göre minimum yayılma ağacını bulun . Yani xy düzleminde A , B'de iki nokta var . Düzlemdeki tüm yayılan ağaç noktalarında A minimum x , B minimum y'dir .birBbir,BbirxBy

  2. Şimdi bir noktaya bulmak amacı üçgen O A B hat maksimum bir mesafeye sahip bir B Elimizdeki böylece bu, X Y değeri üçgen tüm noktaları için minimize .CÖbirBbirBxyA B CCbirBC

Çünkü .2SbirBC=|birBxbirC|=(Bx-birx,By-biry)x(Cx-birx,Cy-biry)=(Bx-birx)Cy+(biry-By)Cx-biry(Bx-birx)+birx(By-biry)

  1. Uyarı bu olan bir sabit, yani artık en üst düzeye çıkarmak amacıyla edilir . Böylece yeni bir grafik yapıyoruz , ağırlık . Şimdi maksimum yayılan ağaç çalıştırıyoruz noktasını almak için .biry(Bx-birx)+birx(By-biry(Bx-birx)Cy+(biry-By)CxG,'=(V,E)w(e)=Be(BxAx)+Cx(AyBy)GC

  2. Yukarıdaki algoritmayı B C , A C ve O arasında daha fazla ağaç kalmayıncaya kadar tekrar tekrar çalıştırın .OBC,OACBC,ACO

  3. Şimdi bir dizi olası yayılan ağaç elde ediyoruz. Minimum ağacı almak için her ağaç için değerini hesaplayın .xy

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.