2016-08-15 24 views
7

ile hiçbir ortak unsurlar Yani bu böyle gider gerçek bir dünya sorunla karşılaştık bir grup paylarında her öğe: biz gruba sıralamak gerekir çiftlerinin bir listesi var. Toplam sahip olduğumuz grup sayısını en aza indirmek istiyoruz; bir grubun herhangi bir üyesinin grubun diğer üyeleriyle bir öğeyi paylaşamaması. İşte Grup Tuplelar öyle ki diğer üyeleri

bir örnektir. Tuples listemiz (A, B), (B, C), (C, A), (D, E), (F, G) dir. [(A, B), (D, E), (F, G)], [(B, C)], [(C, A)] yaparak üç grup oluşturabiliriz.

optimum polinom zamanda bu sorunu çözmek mümkün mü? Açgözlü çözüm ne kadar kötü? Bunun farklı bir sorun olarak ortaya çıkmış olması muhtemeldir, ancak başka bir şeye nasıl indirgeyeceğimi tam olarak anlayamıyorum (grafik rengi akla geliyor). Her demet girişi bir düğümdür ve kenarları dizilerini tarafından verilen bir grafik bulunmaktadır: edge-coloring problem olarak düşünülebilir belirtildiği gibi

+1

Daha uzun bir örnek gönderebilir veya gerçek girdinin boyutunu düşünebilir misiniz? Yinelenen tupl olabilir mi? Her elemanın az çok eşit sayıda görünmesini bekliyor musunuz? – m69

+0

Girişin boyutu 20-60 (çiftler) aralığında bir yerde.Yinelenen tuple yoktur, yani (A, B) sette ise, başka (A, B) veya (B, A) yoktur. Bireysel unsurlar hakkında herhangi bir dağıtım bilgim yok (pratikte bazı unsurların diğerlerinden daha sık göründüğünden şüpheleniyorum, bunun problem için geçerli olduğunu bilmiyorum - problemin bazı olasılıksal bilgisi varsa) Daha iyi bir ortalama durum çözümü sağlar, bana bildirin ve sağlamaya çalışıyorum) –

+0

Girdi ne kadar farklı harfler (veya bunları temsil ediyorsa) girer? Grafiklerinizin [tamamlayıcı grafikleri] (https: //en.wikipedia) [[asgari vertex-cover-size] (https://en.wikipedia.org/wiki/Vertex_cover#Approximate_evaluation)) denemeyi denediniz mi? org/wiki/Complement_graph)? Grafiklerinizin [treewidth'i yaklaştırmaya çalışın] (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.29.7198&rep=rep1&type=pdf) denediniz mi? –

cevap

6

sorunu. Tuplleri gruplara ayırmak, daha sonra uç noktaları paylaşmayan (daha sonra eşleştirmeler) kenar gruplarının bulunmasına karşılık gelir; Diğer bir deyişle, her bir kenar boyaması size bir küme sağlar ve her bir küme, size bir kenar boyama sağlar. Ne yazık ki, en iyi kenar renklendirme bulmak için NP -Zor, yani senin sorunun genel NP -Zor içindedir. Sabit faktör yaklaşımları üreten bu problem için yaklaşık algoritmalar vardır, ancak P = NP hiçbir kesin algoritma olmadıkça. Eğer başlığın başına elemanların herhangi bir sayıda izin vermek için bu sorunu genelleştirirsek

, o zaman bu sorun çok daha zor olur. Bu sorun genel versiyon gerçekten NP -Sert ve grafik boyama gelen bir azalma ile, yaklaştığı çok zordur. Belirli bir vakadaki azalmanın bir örneğini göstereceğim, ancak oldukça güzel bir şekilde genelleştiriyor.

bu gibi bir grafik verilen:

A -- B -- C 
| | | 
D -- E -- F 

Biz dizilerini, bir dizi demet içinde her bir giriş bu düğüme bitişik kenarların grubu her düğüm için bir oluşturmak gerekir. Örneğin, yukarıdaki grafikte, bu dizilerini oluşturacak ediyorum:

(AB, AD) 
(AB, BC, BE) 
(CB, CF) 
(AD, DE) 
(BE, DE, EF) 
(CF, EF) 

Artık bu dizilerini iki örtüşmeyen düşünün. Bu, bu tupllere karşılık gelen iki düğümün bitişik olmaması gerektiği anlamına gelir, çünkü eğer öyleyse, aralarındaki kenar tupllerde ortak bir unsur olur ve bu nedenle kümelenemezler. Öte yandan, eğer iki düğüm bitişik değilse, o zaman onların tuplleri aynı kümede bir araya getirilebilir, çünkü bir tupüldeki hiçbir kenar diğerinde bulunmaz.

Bu kurulumda, orijinal grafiğin herhangi bir rengi, tuplleri kümelendirmenin bir yolunu verir (aynı renkte verilen düğümler için tüm tuplleri aynı kümeye yerleştirir; hiçbiri bitişik değildir, bu nedenle çakışma yapmazlar), ve tuplleri kümelemenin herhangi bir şekilde bir rengi (bir küme içindeki aynı renkteki her bir tuple karşılık gelen tüm düğümleri renklendirir) verir. Bu nedenle, asgari sayıda kümenin bulunması, orijinal grafiğin kromatik sayısını bulmakta, yani NP -hard'dır ve gerçek değere yakın olan herhangi bir yaklaşma algoritmasını kabul etmemektedir.

+0

Burada potansiyel bir sorun görüyorum. Tuple'lar çiftlerle sınırlı gibi gözüküyorlar (OP, "tuple" kelimesinden önce "pair" sözcüğünü kullanır - itirafsız belirsiz), böylece bir düğümün giriş kenarlarının * setini * kodlayamazsınız. tek bir tuple, 2 tuple karşılık gelen düğümlerin bir kenarı paylaştığı şekilde örtüşür. Bence bu seti * çoklu * tuple kullanarak şifreleyebilirsiniz, fakat o zaman bir kümelenme kümesinden bir renk kümesine nasıl gidileceği belli değil (en azından bana göre), çünkü bir tepe noktasına tekabül eden tupler birkaç kümeye dağıtılabilir. –

+0

@j_random_hacker Bunu da farkettim ki ... bunu yazdıktan sonra. :-) En üstteki renklendirmeyi anlatan düzenleme, bu gerçeği daha doğru bir şekilde ele almalı ve hala NP-sertliğini oluşturmalıdır. – templatetypedef

+0

Bu çocuklar için üzgünüm. Bunu fark etmeli ve onu bir diğeriyle sınırlamalıydım. Pratikte, bu sorun sadece elemanların çiftlerine bakıyor. –