Verwenden Sie eine minimale Anzahl von Tauschvorgängen, damit jeder Behälter Bälle der gleichen Farbe enthält

13

Es gibt - Bins, die i enthält th ist ein i Bälle. Die Bälle haben n Farben, es gibt ein i Bälle der Farbe i . Lassen m = Σ n i = 1 a i .niainaiim=i=1nai

Ein Tausch ist, einen Ball aus einem Behälter zu nehmen und mit einem Ball aus einem anderen Behälter zu tauschen. Wir wollen eine minimale Anzahl von Swaps, so dass jeder Behälter nur Bälle mit der gleichen Farbe enthält.

Ich kenne einen einfachen Sonderfall für alle i . (Wenn ein i = 2 für alle i ist , können Sie es sogar tun, indem Sie jeden Ball höchstens einmal tauschen.)ai2iai=2i

Edit : Das ist falsch, weil es NP-schwer ist, .c(D)

Wenn wir wissen, welche Farbe in welche Ablage gelangt, ist das Problem einfach.

Man betrachte einen Multi-Digraphen , V = { v 1 , , v n } . Wenn wir Farbe weiß i geht an bin b ( i ) , dann gibt es k parallele Bögen ( j , b ( i ) ) in A iff bin j enthält k Kugeln der Farbe iD=(V,A)V={v1,,vn}ib(i)k(j,b(i))Ajki. Jede Komponente des Graphen ist Eulersch. Die Mindestanzahl der erforderlichen Swaps beträgt , wobei c ( D ) die Anzahl der nicht zusammenhängenden Lichtbogenzyklen ist, die A abdecken . Wir können tauschen, indem wir einer Eulerschen Schaltung "folgen". (Ein Tausch unter Verwendung eines Bogens eines minimalen Zyklus kann ihn in einen kleineren minimalen Zyklus und eine Selbstschleife ändern.) Sobald der gesamte Graph aus Self-Loops besteht, haben wir alle notwendigen Swaps durchgeführt.mc(D)c(D)A

Wie schwer ist dieses Problem im Allgemeinen?

Chao Xu
quelle

Antworten:

3

Die maximale Zerlegung eines Euler'schen gerichteten Graphen in kantendisjunkte Zyklen ist NP-schwer, zumindest gemäß diesem Buch: Algorithmen und Anwendungen: Essays, die Esko Ukkonen anlässlich seines 60. Geburtstages gewidmet sind .

Übrigens, hier ist ein Artikel, der für das Problem relevant ist, das Sie zu lösen scheinen: Asymptotisch optimaler Algorithmus für den niederländischen Nationalflaggenalgorithmus .

n6

Aryabhata
quelle
Ich bin fälschlicherweise davon ausgegangen, dass wir eine maximale Zerlegung finden können, indem wir einfach auf der Grafik gehen, bis sie einen Zyklus erreicht, und von vorne beginnen. In der Tat ist dieses Problem im Allgemeinen NP-schwer.
Chao Xu,