Árbol de expansión mínimo con parámetros de doble peso

12

Considere una gráfica G(V,E) . Cada borde e tiene dos pesos Ae y Be . Encuentre un árbol de expansión que minimice el producto (eTAe)(eTBe) . El algoritmo debe ejecutarse en tiempo polinómico con respecto a |V|,|E|.

Me resulta difícil adaptar cualquiera de los algoritmos tradicionales en árboles de expansión (Kruskal, Prim, Edge-Deletion). ¿Cómo resolverlo? ¿Alguna pista?

Strin
fuente
emax(Ae,Be)
3
¿Es este un problema / ejercicio de tarea? Si es así, ¿es de un libro de texto? La razón por la que pregunto es que el contexto puede ayudar a "aplicar ingeniería inversa" al problema. No es inmediatamente obvio que un algoritmo codicioso sea apropiado aquí, pero si proviene del capítulo sobre algoritmos codiciosos ...
Joe
1
@utdiscant, eso no funcionará. Los bordes negativos pueden ser útiles.
Nicholas Mancuso
incluso para bordes positivos no es útil, por ejemplo, el par (10,10) no es mejor que el par (11,1) en la mayoría de los casos.

Respuestas:

1

Asumiré que no tienes bordes ponderados negativos, porque esto puede no funcionar si hay pesos negativos.

Algoritmo

Para cada uno de sus bordes, rotúlelos de an1n

Deje pesar A del borde número iaii

Sea peso B del borde número ibii

Dibuja esta tabla

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

Con cada uno de los elementos de la tabla como producto de fila y columna.

Para cada borde, sume la fila y columna de la tabla relevante (y recuerde eliminar el elemento en la intersección ya que se ha sumado dos veces).

Encuentre el borde que tiene la suma más grande, elimine este borde si no desconecta el gráfico. Marque el borde como esencial de lo contrario. Si se ha eliminado un borde, complete sus filas y columnas con 0.

Exactitud

El resultado es obviamente un árbol.

El resultado obviamente se extiende ya que no hay vértices desconectados.

El resultado es mínimo? Si hay otro borde cuya eliminación creará un árbol de expansión más pequeño al final del algoritmo, entonces ese borde se habría eliminado y anulado primero. (si alguien pudiera ayudarme a hacer esto un poco más riguroso y / o contraejemplo, entonces sería genial)

Tiempo de ejecución

Obviamente polinomio en.|V|

editar

(2,11),(11,2),(4,6) no es un contraejemplo.

a1=2,a2=11,a3=4

b1=11,b2=2,b3=6

Luego

   | 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) se elimina.

Termina con(2,11),(4,6)=617=102

Otros árboles de expansión son

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

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

Herp Derpington
fuente
1
Me parece que este es un enfoque bastante codicioso. No me convence su "prueba" de minimalismo.
Nejc
1
@SaeedAmiri ¿Cómo es ese un ejemplo contrario? Publiqué el trabajo en la sección editada, el algoritmo da el resultado correcto.
Herp Derpington el
1
Lo que hizo fue encontrar cuánto contribuye cada uno en , y eliges los que tienen el mayor impacto. Eso es bueno, pero no es lo que se requiere. Es una pregunta difícil. Si desea mejorar su respuesta, debe venir con una prueba. De lo contrario, no tiene sentido. e E a i . e E b i(ai,bi)eEai.eEbi
AJed
Sin embargo, es muy injusto obtener un voto negativo por su esfuerzo.
AJed
@AJed La prueba es la misma que en la eliminación primaria / kush / inversa. Todo lo que tenemos que demostrar ahora es que la propiedad de corte aún se mantiene.
Herp Derpington
1

Esta es la solución de http://www.cnblogs.com/autsky-jadek/p/3959446.html .

Podemos ver cada árbol de expansión como un punto en el plano , donde es la suma de peso , y es la suma de peso . El objetivo es minimizar .x e T AxyxeTAeeTBexy

  1. Encontrar el árbol de expansión mínima en función del peso y peso . Así que tenemos dos puntos en el plano xy . En todos los puntos del árbol de expansión en el plano, tiene el mínimo , tiene el mínimo .BABA,BAxBy

  2. Ahora nuestro objetivo es encontrar un punto en el triángulo que tenga una distancia máxima a la línea , de modo que podamos minimizar el valor de para todos los puntos en el triángulo .O A BCOABABxyCABC

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

  1. Observe que es una constante, por lo que ahora a maximizar . Entonces hacemos un nuevo gráfico , mientras que el peso . Ahora ejecutamos un árbol de expansión máxima en para obtener el punto . ( B x - A x ) C y +( A y - B y ) C x G =(V,E)w(e)= B e ( B x - A x )+ C x ( A yAy(BxAx)+Ax(ByAy(BxAx)Cy+(AyBy)CxG=(V,E)w(e)=Be(BxAx)+Cx(AyBy)GC

  2. Ejecutar el algoritmo anterior en de forma recursiva, hasta que no hay más árboles de expansión entre y .B C , A C OOBC,OACBC,ACO

  3. Ahora tenemos un conjunto de posibles árboles de expansión. Calcule el valor para cada árbol para obtener el árbol mínimo.xy


fuente