2016-04-14 19 views
-1

Pozitif değerler ile doldurulmuş bir n-by-gridiniz olduğunu düşünün. Izgaradan min (n, m) kareleri seçip, onu aldığınızda karenin sırasını ve sütununu ortadan kaldırırsınız. Skorunuz o zaman seçtiğiniz karedeki bazı değerlerdir. Mümkün olan en yüksek puanı bulmaya çalışıyorum. Bunu, tüm olasılıkları aşmaktan başka bir yolu var mı? Her şeyi numaralandırmam gerekirse, bunu yapmanın en etkili yolu nedir? Bu bir fark yaratırsa bunu python'da uygulamaya çalışıyorum. Teşekkürler.Elimine edilen tablodan maksimum toplam puan

+0

"Şebekeden kareler toplama" ile neyi kastettiğinizi açıklayabilir misiniz? – spiffman

+1

Lütfen daha önce denediğiniz kod örneklerini gönderin –

+2

Bu, [ağırlıklı iki bölümlü grafikte maksimum eşleşme bulma] ile eşdeğerdir (https://en.wikipedia.org/wiki/Matching_ (graph_theory) #In_weighted_bipartite_graphs) . Bunu yapmak için algoritmalara bakın. – user2357112

cevap

1

Bu, finding a maximum matching in a weighted bipartite graph'a eşdeğerdir. Satırlar ve sütunlar, grafiğin düğümlerine karşılık gelir ve table[u][v], sıfır olmayan bir x içeriyorsa, sıra düğümü ve sütun x arasında x değeri ile bir kenar vardır. Maksimum eşleştirmede seçilen kenarlar, seçim yapmak için sıfır olmayan hücrelere karşılık gelir; Eşleşmedeki min(n, m) kenarından daha az varsa, tablo hücrelerine kalan seçeneklerin tümü sıfır değerine sahiptir, böylece kalan hücreleri rasgele seçebilirsiniz. (Tablo negatif girdileri olabilir varsa, tüm girişler grafiği oluşturmadan önce negatif olmayan olduğundan emin olmak için yukarı tüm tablo girdileri ayarlamak gerekir.) NetworkX gibi

Grafik kütüphaneleri ve ağırlıklı maksimum eşleştirme algoritmalarının igraph teklif uygulamaları, Böylece tablonuzu bir grafiğe dönüştürebilir ve zor çalışmayı kütüphaneye aktarabilirsiniz.

+0

Emin olmadığınız tek bölüm, negatif girdilerle ilgili parantezliğinizdir ... Tüm ağırlıklar için sabit bir c eklediğinizde, tüm ağırlıklar pozitif olsa bile, kenarların * sayısı * maksimum ağırlıklı eşlemede artabilir. ile başlamak için (her ek kenar başka bir c puan ödüllendirdiğinden), bu yüzden bunu yaparak optimallik korunur emin değilim. Aklında başka bir şey var mı? –

+0

@j_random_hacker: Sorunun her zaman bir max-cardinality eşleşmesini karşılayan min (n, m) grid hücrelerini seçmesi gerekiyor (eğer olasılıkla zamanından önce bir optimizasyon olarak elimine edilen sıfır ağırlık kenarlarını gerçekleştirirseniz). Tüm bu eşleşmeler, tüm tablo girişlerine bir sabit ekleyerek, ağırlıklarının eşit şekilde etkilenmesini sağlar. – user2357112

+0

Teşekkürler, bu özel bipartit grafiğin tamamlandığını unutuyordum, bu yüzden tüm kenarlar pozitif ağırlığa sahipse, maksimum ağırlık eşleşmesi mutlaka min (n, m) kenarlara sahip olacaktır. Cevabınıza "tamamlandı" nı eklemenizi öneririm; –

İlgili konular