pgr_stoerWagner - Experimental

pgr_stoerWagner — El corte mínimo del grafo usando el algoritmo Stoer-Wagner.

_images/boost-inside.jpeg

Adentro: Boost Graph

Advertencia

Posible bloqueo del servidor

  • Estas funciones pueden crear una caída del servidor

Advertencia

Funciones experimentales

  • No son oficialmente de la versión actual.

  • Es probable que oficialmente no formen parte de la siguiente versión:

    • Las funciones no podrían hacer uso de ANY-INTEGER ni ANY-NUMERICAL

    • El nombre puede cambiar.

    • La firma puede cambiar.

    • La funcionalidad puede cambiar.

    • Las pruebas de pgTap pueden faltar.

    • Posiblemente necesite codificación c/c++.

    • Puede carecer documentación.

    • Hay documentación que, en dado caso, podría ser necesario reescribir.

    • Puede ser necesario que los ejemplos de documentación se generen automáticamente.

    • Puede ser necesaria retroalimentación por parte de la comunidad.

    • Puede depender de una función propuesta de pgRouting

    • Podría depender de una función obsoleta de pgRouting

Disponibilidad

  • Versión 3.0

    • Nueva función Experimental

Descripción

En teoría de grafos, el algoritmo Stoer-Wagner es un algoritmo recursivo para resolver el problema de corte mínimo en gráficos ponderados no dirigidos con pesos no negativos. La idea esencial de este algoritmo es encoger el grafo mediante la fusión de los vértices más intensivos, hasta que el grafo sólo contiene dos conjuntos de vértices combinados. En cada fase, el algoritmo encuentra el corte s-t mínimo para dos vértices s y t elegidos a su voluntad. A continuación, el algoritmo encoge la arista entre s y t para buscar cortes no s-t. El corte mínimo encontrado en todas las fases será el corte ponderado mínimo del grafo.

Un corte es una partición de los vértices de un grafo en dos subconjuntos separados. Un corte mínimo es un corte para el que el tamaño o peso del corte no es mayor que el tamaño de cualquier otro corte. Para un grafo no ponderado, el corte mínimo sería simplemente el corte con menos aristas. Para un grafo ponderado, la suma del peso de todas las aristas en el corte determina si se trata de un corte mínimo.

Las principales características son:

  • El proceso se realiza sólo en aristas con costos positivos.

  • Su implementación es solo para grafo no dirigido.

  • La suma de los pesos de todas las aristas entre los dos conjuntos es mincut.

    • Un mincut es un corte que tiene el menor peso.

  • Los valores se devuelven cuando se conecta el grafo.

    • Cuando no hay arista en el grafo se devuelve EMPTY SET.

    • Cuando el gráfico está desconectado, se devuelve un conjunto vacío o EMPTY SET.

  • A veces un grafo tiene varios cortes mínimos, pero todos tienen el mismo peso. Esta función determina exactamente uno de los cortes mínimos, así como su peso.

  • Tiempo de ejecución: \(O(V*E + V^2*log V)\).

Firmas

pgr_stoerWagner(SQL de aristas)
RETURNS SET OF (seq, edge, cost, mincut)
OR EMPTY SET
Ejemplo:

corte mínimo de el subgrafo principal

SELECT * FROM pgr_stoerWagner(
  'SELECT id, source, target, cost, reverse_cost
  FROM edges WHERE id < 17');
 seq | edge | cost | mincut
-----+------+------+--------
   1 |    6 |    1 |      1
(1 row)

Parámetros

Parámetro

Tipo

Descripción

SQL de aristas

TEXT

SQL de aristas descritas más adelante.

Consultas Internas

SQL aristas

Columna

Tipo

x Defecto

Descripción

id

ENTEROS

Identificador de la arista.

source

ENTEROS

Identificador del primer vértice de la arista.

target

ENTEROS

Identificador del segundo vértice de la arista.

cost

FLOTANTES

Peso de la arista (source, target)

reverse_cost

FLOTANTES

-1

Peso de la arista (target, source)

  • Cuando negativo: la arista (target, source) no existe, por lo tanto no es parte del grafo.

Donde:

ENTEROS:

SMALLINT, INTEGER, BIGINT

FLOTANTES:

SMALLINT, INTEGER, BIGINT, REAL, FLOAT

Columnas de Resultados

Devuelve conjunto de (seq, edge, cost, mincut)

Columna

Tipo

Descripción

seq

INT

Valor secuencial a partir de 1.

arista

BIGINT

Aristas que dividen el conjunto de vértices en dos.

costo

FLOAT

Costo para atravesar la arista.

mincut

FLOAT

Peso de corte mínimo de un grafo no dirigido.

Ejemplo Adicional:

Ejemplo:

corte mínimo de una arista

SELECT * FROM pgr_stoerWagner(
  'SELECT id, source, target, cost, reverse_cost
  FROM edges WHERE id = 18');
 seq | edge | cost | mincut
-----+------+------+--------
   1 |   18 |    1 |      1
(1 row)

Ejemplo:

Usando pgr_connectedComponents

SELECT * FROM pgr_stoerWagner(
  $$
  SELECT id, source, target, cost, reverse_cost FROM edges
  WHERE source IN (
      SELECT node FROM pgr_connectedComponents(
      'SELECT id, source, target, cost, reverse_cost FROM edges ')
      WHERE component = 2)
  $$
);
 seq | edge | cost | mincut
-----+------+------+--------
   1 |   17 |    1 |      1
(1 row)

Ver también

Índices y tablas