Macar algoritmasının genel yönlendirilmemiş grafiklere genelleştirilmesi?


14

Macar algoritması, polinom zamanında maksimum ağırlık bipartit eşleştirme problemini çözen ve önemli primal-dual yönteminin daha sonra geliştirilmesini öngören bir kombinatoryal optimizasyon algoritmasıdır . Algoritma 1955 yılında Harold Kuhn tarafından geliştirilen ve "Macar algoritması" adını veren algoritma geliştirildi ve yayınlandı çünkü algoritma iki Macar matematikçinin eski eserlerine dayanıyordu: Dénes Kőnig ve Jenő Egerváry. Munkres 1957'de algoritmayı gözden geçirdi ve gerçekten de çok zamanlı olduğunu gözlemledi. O zamandan beri algoritma Kuhn-Munkres algoritması olarak da bilinir.

Macarca, primal-dual yönteminin temel fikrini içermesine rağmen, herhangi bir doğrusal programlama (LP) makinesi kullanmadan maksimum ağırlıktaki iki taraflı eşleştirme problemini doğrudan çözer. Böylece, aşağıdaki sorunun cevabına göre , Jukka Suomela

Tabii ki herhangi bir LP'yi genel amaçlı bir LP çözücü kullanarak çözebilirsiniz, ancak özel algoritmalar genellikle çok daha iyi bir performansa sahiptir. [...] Ayrıca kayan nokta sayıları vs tam rasyonel sayılar kullanarak gibi sorunları önleyebilirsiniz; her şey tamsayılarla kolayca yapılabilir.

Başka bir deyişle, belirli bir iki taraflı grafiğin maksimum ağırlıkla mükemmel uyumunu elde etmek için rasyonel / kayan nokta çözümünün LP çözücüsünden nasıl yuvarlanacağı konusunda endişelenmenize gerek yoktur.

Sorum şu:

LP makinesini orijinal Macar algoritmasının ruhuna benzer şekilde kullanmadan genel yönlendirilmemiş grafik için çalışan bir Macar algoritması genellemesi var mı ?

Bazı orijinal karmaşık kağıtlar yerine modern ve okunması kolay sergileri tercih ederim. Ancak herhangi bir işaretçi çok takdir edilecektir!

Şimdiden çok teşekkürler ve Mutlu Noeller !!!


Güncelleme: Soru aşağıdaki Arman tarafından güzel bir şekilde cevaplandı. Sadece Edmonds'un Çiçeği Algoritmasını (ağırlıklı vaka için) incelemek için güzel bir kaynağın Korte ve Vygen'in Kombinatoryal Optimizasyonunun 11. Bölümü olduğuna dikkat çekmek istiyorum . Google kitap aslında algoritmayı anlamak için ihtiyacım olan tüm parçaları gösteriyor.


2
Edmonds'un eşleşen algoritmasına ne dersiniz? en.wikipedia.org/wiki/Edmonds%27s_matching_algorithm
Arman

1
@Arman - Ben de öyle düşünüyordum. Bağlantı için teşekkürler, Wikipedia, Edmond'un çiçek algoritmasının şaşırtıcı derecede ayrıntılı bir açıklamasına sahiptir.
Abraham Flaxman

2
Bu arada, Edmonds'un eşleştirme algoritması da Primal-Dual yöntemine dayanmaktadır.
Arman

1
Teşekkürler Arman. Vikipedi bağlantısı, Edmonds algoritmasının ağırlıklı versiyonu için "Lovász, László; Plummer, Michael (1986). Eşleştirme Teorisi" kitabına da işaret etmektedir. O kitabı gerçekten kontrol etmeliyim. Yorumlarınız için çok teşekkür ederim! Belki herhangi biriniz algoritmanın Macar algoritmasını nasıl genelleştirdiğini yüksek düzeyde açıklayabilirseniz, kesinlikle bir cevap verebilirsiniz.
Dai Le

1
Bence bu oldukça iyi bir cevap :). Arman, böyle eklemelisin
Suresh Venkat

Yanıtlar:


16

Edmonds'un eşleştirme algoritması (Blossom Algorithm olarak da bilinir) genel grafiklerde maksimum eşleşmeyi çözer. Aslında alternatif yollar yönteminin genelleştirilmesidir. (Ben değil emin yöntemin adının değilim ama König-Hall yöntemi shoud.) Temelde yolları (wikipedia sayfasını görmek: artırmada bulur http://en.wikipedia.org/wiki/Edmonds%27s_matching_algorithm ) uzatmak mevcut eşleştirme ve daha fazla artırıcı yol yoksa durur. Genel grafiklerde, tek sorun tek döngülerde ortaya çıkar. Edmonds'un eşleşen algoritmasında garip döngüler kasılır (çiçek açar) ve bir çözüme sahip olmak için geri gönderilir.

Ayrıca Blossom Algorithm ve Primal Dual yöntemi arasında bir yazışma vardır. Tek döngüler kesirli uç noktalara neden olur. Bu nedenle, her bir tek döngü için çiçek eşitsizlikleri olarak ekliyoruz.

Minimum ağırlıklı mükemmel eşleştirme ve maksimum ağırlık eşleştirme sorunları da bu yaklaşımla ele alınabilir.

Algoritmanın ayrıntıları için bkz. Http://en.wikipedia.org/wiki/Edmonds%27s_matching_algorithm http://www.cs.berkeley.edu/~karp/greatalgo/lecture05.pdf

Matematiksel formülasyon ve ilgili primal-dual yöntemi için bkz. Http://webdocs.cs.ualberta.ca/~mreza/courses/CombOpt09/lecture4.pdf


9

İki yıl önce, (ağırlıksız) çiçek algoritmasını araştırırken, biri Tarjan diğeri Zwick olmak üzere iki harika not buldum. Ağırlıksız davayı oldukça basit hale getirdiler ve bunu Mathematica'da özyineleme kullanarak uygulayabildim. Oldukça iyi çalışıyor.

Yararlı bulduğum notlar

http://www.cs.tau.ac.il/~zwick/grad-algo-06/match.pdf ve http://www.cs.dartmouth.edu/~ac/Teach/CS105-Winter05/Handouts/ tarjan-blossom.pdf

Her şeyi bir kişinin özyineli olarak düşünmesine izin veren çok basit terimlere damıtırlar ve daha sonra belirtildiği gibi, özyinelemeli olarak programlarlar.

Sanırım her şey şu anda uygulamaya çalıştığım ağırlıklı davada çalışmalı.


Ve özgür yazılım ile herkes tarafından izlenebilir demolar var: Birincisi gösterileri <.... güzel çiçek demonstrations.wolfram.com/... > < demonstrations.wolfram.com/TheHungarianMaximumMatchingAlgorithm > < demonstrations.wolfram.com/ YerleştirmeDominoesOnACheckerboard >
Stan Wagon

Ve Korte / Vygen'de verildiği gibi ağırlıksız çiçeği programladım. Onun kod için bir kaç speedups görüyorum (örneğin, hiçbir şey aksine, maksimum bir eşleştirme ile başlayın), ama güzel bir şey onun işlem kodu kolayca çalışma koduna çevirmek bir biçimde verilir olmasıdır. Sonraki: çok daha zor olan ağırlıklı çiçek.
Stan Vagon
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.