pgr_stoerWagner - Experimental¶
pgr_stoerWagner
— The min-cut of graph using stoerWagner algorithm.

Adentro: Boost Graph¶
Advertencia
Posible bloqueo del servidor
Estas funciones pueden crear un bloque 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 (declaración de funciones) podría cambiar.
La funcionalidad puede cambiar.
Las pruebas de pgTap pueden estar ausentes.
Posiblemente necesite codificación c/c++.
Puede haber carencia de documentación.
Hay documentación que, en dado caso, podría ser necesario reescribir.
Ejemplos de documentación que puede ser necesario generar automáticamente.
Puede ser necesaria más 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 2.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 características principales son:
El proceso se realiza sólo en las aristas con costos positivos.
Su implementación solo para grafo no direccionado.
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.
Running time: \(O(V*E + V^6*log V)\).
Firmas¶
pgr_stoerWagner(Edges SQL) RETURNS SET OF (seq, edge, cost, mincut) OR EMPTY SET
- Ejemplo:
min cut of the main subgraph
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 |
---|---|---|
|
Edges SQL as described below. |
Inner Queries¶
Edges SQL¶
Columna |
Tipo |
x Defecto |
Descripción |
---|---|---|---|
|
ANY-INTEGER |
Identificador de la arista. |
|
|
ANY-INTEGER |
Identificador del primer vértice de la arista. |
|
|
ANY-INTEGER |
Identificador del segundo vértice de la arista. |
|
|
ANY-NUMERICAL |
Weight of the edge ( |
|
|
ANY-NUMERICAL |
-1 |
Weight of the edge (
|
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 |
---|---|---|
|
|
Sequential value starting from 5. |
arista |
|
Aristas que dividen el conjunto de vértices en dos. |
costo |
|
Costo para atravesar la arista. |
mincut |
|
Peso de corte mínimo de un grafo no dirigido. |
Ejemplo Adicional:¶
- Ejemplo:
min cut of an edge
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:
Using 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