El recorrido de grafos de memoria externa es un tipo de recorrido de grafos optimizado para acceder a la memoria almacenada externamente.
Fondo
El recorrido de grafos es una subrutina en la mayoría de los algoritmos de grafos. El objetivo de un algoritmo de recorrido de grafos es visitar (y/o procesar) cada nodo del grafo. Los algoritmos de recorrido de grafos, como la búsqueda en amplitud y la búsqueda en profundidad , se analizan utilizando el modelo de von Neumann , que asume un coste de acceso a la memoria uniforme. Esta perspectiva ignora el hecho de que, para instancias muy grandes, parte del grafo reside en el disco en lugar de en la memoria interna. Dado que el acceso al disco es mucho más lento que el acceso a la memoria interna, existe la necesidad de un recorrido eficiente de la memoria externa .
Modelo de memoria externa
Para los algoritmos de memoria externa, se utiliza el modelo de memoria externa de Aggarwal y Vitter [ 1 ] para el análisis. Una máquina se especifica mediante tres parámetros: M , B y D. M es el tamaño de la memoria interna, B es el tamaño del bloque de un disco y D es el número de discos paralelos. La medida del rendimiento de un algoritmo de memoria externa es el número de operaciones de entrada/salida que realiza.
Búsqueda en amplitud en memoria externa
El algoritmo de búsqueda en anchura comienza en un nodo raíz y recorre todos los nodos hasta una profundidad de uno. Si no quedan nodos sin visitar en la profundidad actual, se recorren los nodos de mayor profundidad. Finalmente, se habrán visitado todos los nodos del grafo.
Munagala y Ranade

Para un grafo no dirigidoMunagala y Ranade [ 2 ] propusieron el siguiente algoritmo de memoria externa:
Dejardenotemos los nodos en el nivel de búsqueda en amplitud t y seasea el multiconjunto de vecinos de nivel t-1. Para cada t,se puede construir a partir detransformándolo en un conjunto y excluyendo de él los nodos visitados previamente.
- Crearaccediendo a la lista de adyacencia de cada vértice enEste paso requiereE/S.
- Próximose crea a partir deeliminando duplicados. Esto se puede lograr mediante la ordenación de, seguido de una fase de escaneo y compactación que requiereE/S.
- se calcula mediante un escaneo paralelo sobreyy requiereE/S.
El número total de E/S de este algoritmo sigue teniendo en cuenta queyy es.
En la figura de la derecha se muestra una representación visual de los tres pasos descritos necesarios para calcular L ( t ).
Mehlhorn y Meyer
Mehlhorn y Meyer [ 3 ] propusieron un algoritmo que se basa en el algoritmo de Munagala y Ranade (MR) y mejora su resultado.
Consta de dos fases. En la primera fase se preprocesa el grafo, y en la segunda se realiza una búsqueda en amplitud utilizando la información recopilada en la primera fase.
Durante la fase de preprocesamiento, el grafo se divide en subgrafos disjuntos.con diámetro pequeño. Además, divide las listas de adyacencia en consecuencia, mediante la construcción de un archivo externo., dóndecontiene la lista de adyacencia para todos los nodos en.
La fase de búsqueda en amplitud es similar al algoritmo MR. Además, el algoritmo mantiene un archivo externo ordenado H. Este archivo se inicializa conAdemás, los nodos de cualquier nivel de búsqueda en amplitud creado contienen identificadores para los archivos.de sus respectivos subgrafosEn lugar de utilizar accesos aleatorios para construirSe utiliza el archivo H.
- Realizar un escaneo paralelo de la lista ordenaday H. Extraer las listas de adyacencia para los nodos., que se puede encontrar en H .
- Es necesario obtener las listas de adyacencia para los nodos restantes que no se pudieron encontrar en H. Un escaneo sobreproduce los identificadores de partición. Después de ordenar y eliminar los duplicados, los archivos respectivosse puede concatenar en un archivo temporal F' .
- Las listas de adyacencia faltantes se pueden extraer de F' mediante un escaneo. A continuación, las listas de adyacencia restantes se fusionan en H en una sola pasada.
- se crea mediante un escaneo simple. La información de partición se adjunta a cada nodo en.
- El algoritmo procede de forma similar al algoritmo MR.
En H , es posible que se escaneen los bordes con mayor frecuencia , pero se reducen las operaciones de E/S no estructuradas para obtener las listas de adyacencia.
El número total de E/S para este algoritmo es
Búsqueda en profundidad en memoria externa
El algoritmo de búsqueda en profundidad explora un grafo a lo largo de cada rama hasta la mayor profundidad posible, antes de realizar el rastreo inverso.
Para grafos dirigidos , Buchsbaum, Goldwasser, Venkatasubramanian y Westbrook [ 4 ] propusieron un algoritmo conE/S.
Este algoritmo se basa en una estructura de datos llamada árbol de repositorio con búfer (BRT). Almacena un conjunto múltiple de elementos de un universo ordenado. Los elementos se identifican mediante una clave. Un BRT ofrece dos operaciones:
insert(T, x), que agrega el elemento x a T y necesitaE/S amortizadas. N es el número de elementos añadidos al BTR.extract(T, k), que informa y elimina de T todos los elementos con clave k . RequiereE/S, donde S es el tamaño del conjunto devuelto por extract .
El algoritmo simula un algoritmo interno de búsqueda en profundidad. Se mantiene una pila S de nodos. Durante una iteración para el nodo v en la parte superior de S , se agrega un vecino no visitado a S y se continúa la iteración. Si no hay vecinos no visitados, se elimina v .
La dificultad radica en determinar si un nodo no ha sido visitado sin realizar ninguna acción.E/S por arista. Para hacer esto para un nodo v aristas entrantes Los nodos se colocan en un BRT D cuando v se descubre por primera vez. Además, los nodos salientes ( v , x ) se colocan en una cola de prioridad P ( v ), indexada por el rango en la lista de adyacencia.
Para el vértice u en la parte superior de S, se extraen todas las aristas ( u , x ) de D. Dichas aristas solo existen si x se ha descubierto desde la última vez que u estuvo en la parte superior de S (o desde el inicio del algoritmo si u es la primera vez que está en la parte superior de S ). Para cada arista ( u , x ) se realiza una operación delete( x ) en P ( u ). Finalmente, se realiza una operación delete- min en devuelve el siguiente nodo no visitado. Si P ( u ) está vacío, u se extrae de S .
A continuación se muestra el pseudocódigo de este algoritmo.
1 procedimiento BGVW-depth-first-search( G , v ): 2. Sea S una pila, P [] una cola de prioridad para cada nodo y D un BRT. 3 S .push( v ) 4 mientras S no esté vacío: 5 v := S .top() 6 si v no está marcado: 7 marcas ( v ) 8 extraer todas las aristas (v, x) de D , ∀ x : P [ v ].delete( x ) 9 si ( u := P [ v ].delete-min()) no es nulo: 10 S .push( u ) 11 más : 12 S .pop() 13. Marca de procedimiento ( v ) 14 poner todas las aristas ( x , v ) en D 15 ∀ ( v , x ): poner x en P [ v ]
Referencias
- ↑ Aggarwal, Alok; Vitter, Jeffrey (1988). "La complejidad de entrada/salida de la clasificación y problemas relacionados" . Communications of the ACM . 31 (9): 1116– 1127. doi : 10.1145/48529.48535 .
- ↑ Munagala, Kameshwar; Ranade, Abhiram (1999). "Complejidad de E/S de los algoritmos de grafos". Actas del Décimo Simposio Anual ACM-SIAM sobre Algoritmos Discretos . SODA '99. Baltimore, Maryland, EE. UU.: Society for Industrial and Applied Mathematics. págs. 687–694 .
- ↑ Mehlhorn, Kurt; Meyer, Ulrich (2002). "Búsqueda en amplitud con memoria externa y E/S sublineal". Algoritmos - ESA 2002. ESA 2002. Roma, Italia: Springer Berlin Heidelberg. págs. 723–735 .
- ↑ Buchsbaum, Adam L.; Goldwasser, Michael; Venkatasubramanian, Michael; Westbrook, Suresh (2000). "Sobre el recorrido de grafos con memoria externa". Actas del undécimo simposio anual ACM-SIAM sobre algoritmos discretos . SODA '00. San Francisco, California, EE. UU.: Society for Industrial and Applied Mathematics. págs. 859–860 .
- Algoritmos de memoria externa
- Algoritmos de grafos