Arbre couvrant minimal avec des paramètres de double poids

12

Considérons un graphe . Chaque arête a deux poids et . Trouvez un arbre couvrant qui minimise le produit . L'algorithme doit s'exécuter en temps polynomial par rapport à.G(V,E)eAeBe(eTAe)(eTBe)|V|,|E|

Je trouve difficile d'adapter l'un des algorithmes traditionnels sur les arbres couvrant (Kruskal, Prim, Edge-Deletion). Comment le résoudre? Des indices?

Strin
la source
Essayez peut-être de construire un nouveau graphe, où le poids d'une arête est . emax(Ae,Be)
utdiscant
3
Est-ce un problème / exercice de devoirs? Si oui, est-ce à partir d'un manuel? La raison pour laquelle je pose la question est que le contexte peut aider à "désosser" le problème. Il n'est pas immédiatement évident qu'un algorithme gourmand est approprié ici, mais s'il provient du chapitre sur les algorithmes gourmands ...
Joe
1
@utdiscant, ça ne marchera pas. Les bords négatifs peuvent être utiles.
Nicholas Mancuso
même pour les bords positifs n'est pas utile, par exemple la paire (10,10) n'est pas meilleure que la paire (11,1) dans la plupart des cas.

Réponses:

1

Je vais supposer que vous ne recevez pas de bords pondérés négatifs, car cela peut ne pas fonctionner s'il y a des poids négatifs.

Algorithme

Pour chacun de vos bords, étiquetez-les de àn1n

Soit poids A du nombre d'arêtes iaii

Soit poids B du nombre d'arêtes ibii

Dresser ce tableau

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

Chacun des éléments du tableau étant le produit d'une ligne et d'une colonne.

Pour chaque bord, additionnez la ligne et la colonne de tableau pertinentes (et n'oubliez pas de supprimer l'élément dans l'intersection car il a été additionné deux fois).

Trouvez l'arête qui a la plus grande somme, supprimez cette arête si elle ne déconnecte pas le graphique. Marquez le bord comme essentiel sinon. Si un bord a été supprimé, remplissez ses lignes et colonnes avec 0.

Exactitude

Le résultat est évidemment un arbre.

Le résultat s'étend évidemment car aucun sommet n'est déconnecté.

Le résultat est minime? S'il existe un autre bord dont la suppression créera un arbre couvrant plus petit à la fin de l'algorithme, ce bord aurait été supprimé et annulé en premier. (si quelqu'un pouvait m'aider à rendre cet exemple un peu plus rigoureux / et / ou contre, ce serait formidable)

Durée

Évidemment polynomial dans.|V|

Éditer

(2,11),(11,2),(4,6) n'est pas un contre-exemple.

a1=2,a2=11,a3=4

b1=11,b2=2,b3=6

alors

   | 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) est supprimé.

Se retrouver avec(2,11),(4,6)=617=102

D'autres arbres couvrant sont

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

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

Herp Derpington
la source
1
Il me semble que c'est une approche plutôt gourmande. Je ne suis pas convaincu par votre "preuve" de minimalisme.
Nejc
1
@SaeedAmiri Comment est-ce un contre-exemple? J'ai posté le travail dans la section éditée, l'algorithme donne le résultat correct.
Herp Derpington
1
Ce que vous avez fait, c'est de savoir combien chacun contribue dans , et vous choisissez celles qui ont le plus d'impact. C'est bien, mais ce n'est pas ce qui est requis. C'est une question délicate. Si vous souhaitez améliorer votre réponse, vous devez fournir une preuve. Sinon, cela ne sert à rien. (ai,bi)eEai.eEbi
AJed
il est cependant très injuste d'obtenir un vote négatif pour vos efforts.
AJed
@AJed La preuve est la même que dans la suppression prim / kush / reverse. Tout ce que nous devons prouver maintenant, c'est que la propriété coupée tient toujours.
Herp Derpington
1

Il s'agit de la solution de http://www.cnblogs.com/autsky-jadek/p/3959446.html .

Nous pouvons voir chaque arbre couvrant comme un point dans le plan , où est la somme des poids , y est la somme des poids . Le but est de minimiser .xyxeTAeeTBexy

  1. Trouvez l'arbre minimum en fonction du poids et le poids . Nous avons donc deux points dans le plan xy . Dans tous les points d'arbre couvrant dans le plan, a le minimum , a le minimum .ABA,BAxBy

  2. Maintenant, nous cherchons à trouver un point dans le triangle qui a la distance maximale à la ligne , afin que nous puissions avoir la valeur pour minimisée pour tous les points du triangle .COABABxyCABC

Parce que .2SABC=|AB×AC|=(BxAx,ByAy)×(CxAx,CyAy)=(BxAx)Cy+(AyBy)CxAy(BxAx)+Ax(ByAy)

  1. Notez que est une constante, alors maintenant nous visons à maximiser . Nous donc un nouveau graphe , tandis que le poids . Maintenant, nous un arbre couvrant maximum sur pour obtenir le point . ( B x - A x ) CAy(BxAx)+Ax(ByAy(BxAx)Cy+(AyBy)CxG=(V,E)w(e)=Be(BxAx)+Cx(AyBy)GC

  2. Exécutez l'algorithme ci - dessus sur récursive, jusqu'à ce qu'il n'y a plus d' arbres couvrant entre et .B C , A C OOBC,OACBC,ACO

  3. Nous obtenons maintenant un ensemble d'arbres couvrant possibles. Calculez la valeur pour chaque arbre pour obtenir l'arbre minimum.xy


la source