algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

59
Algoritmos paralelos de grafos y búsqueda (pt.1: grafos) Glen Rodríguez Algoritmos paralelos

Upload: sissy

Post on 17-Jan-2016

48 views

Category:

Documents


0 download

DESCRIPTION

Algoritmos paralelos de grafos y búsqueda (pt.1: grafos). Glen Rodríguez Algoritmos paralelos. Agenda. Vista general de las Aplicaciones Definiciones y Representación Árbol recubridor mínimo (Minimum Spanning Tree): Alg. de Prim Ruta más corta (con un solo origen): Dijkstra's Algorithm - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Glen Rodríguez

Algoritmos paralelos

Page 2: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Agenda

Vista general de las Aplicaciones Definiciones y Representación Árbol recubridor mínimo (Minimum Spanning

Tree): Alg. de Prim Ruta más corta (con un solo origen): Dijkstra's

Algorithm Todas los pares de Rutas más cortas Clausura transitiva (Transitive Closure) Componentes conectados

Page 3: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Redes de transporte, rutas más cortas: 15 segs (“naïve”) 10 microsegs

Ruteo en transporte terrestre

H. Bast et al., “Fast Routing in Road Networks with Transit Nodes”, Science 27, 2007.

Page 4: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

La web se puede representar como gráfico dirigido Web search , web crawl: traversal (recorrido de grafo) Análisis de links, ranking: Page rank, HITS Clasificación y clustering (agrupamiento) de documentos

Las topologías de Internet (redes de routers) are se modelan naturalmente como grafos

Internet y la WWW

Page 5: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Reordernar cols/filas en matr.dispersas Para reducir/concentrar el “lleno”

Particionar, eigen-vectores Diagonal pesada para menos pivoting

Estructuras de datos para explotar

mejor el patrón disperso Optimización

Matroides, colorear grafos, spanning trees Preconditionadores

Factorización incompleta Particionar dominios Grafos en multigrid

Independent sets, matchings, etc. Teoría de soprte

Spanning trees & graph embedding

Cómputo científico

B. Hendrickson, “Graphs and HPC: Lessons for Future Architectures”, http://www.er.doe.gov/ascr/ascac/Meetings/Oct08/Hendrickson%20ASCAC.pdf

Image source: Yifan Hu, “A gallery of large graphs”

Image source: Tim Davis, UF Sparse Matrix Collection.

Page 6: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Abstraer algo como grafo es útil parta analizar data con relaciones/estructura complicada.

Fuentes de data: simulaciones de peta-escala, sensores en experimentos, Internet, redes de sensores

Desafios: enorme tamaño de data, heterogeneidad, incertidumbre, calidad de la data

Análisis de grandes cantidades de data

Astrofísica: datasets masivos, variaciones en el tiempo

Bioinformática: calidad de data, heterogeneidad

Redes sociales: anáisis, incertidumbre

Image sources: (1) http://physics.nmt.edu/images/astro/hst_starfield.jpg (2,3) www.visualComplexity.com

Page 7: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Estudio de la interacción entre componentes de un sistema biológico

Se usan mucho los grafos: Predecir nuevas interacciones:

modelado Anotación funcional de nuevas

proteínas: matching, clustering Identificar rutas metabólicas:

rutas, clustering Identificar nuevos complejos de

proteínas: clustering, centralidad

Análisis de data y Alg. de grafos en Biología Sistémica

Image Source: Giot et al., “A Protein Interaction Map of Drosophila melanogaster”, Science 302, 1722-1736, 2003.

Page 8: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Image Source: Nexus (Facebook application)

Grafos y las redes sociales

– Identificar comunidades: clustering– Publicidad personalizada: centralidad– Difusión de la información: modelado

Page 9: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

[Krebs ’04] Análisis de redes terroristas usando información pública (luego de Torres Gemelas).

Determinar líderes de los patrones de interacción: centralidad

Vista globla de las entidades arroja más luces

Detectar actividades anormales isomorfismo de subgrafos exacto o aproximado

Image Source: http://www.orgnet.com/hijackers.html

Análisis de redes para Inteligencia y Vigilancia

Image Source: T. Coffman, S. Greenblatt, S. Marcus, Graph-based technologies for intelligence analysis, CACM, 47 (3, March 2004): pp 45-47

Page 10: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Áreas deAplicación

Métodos/Problemas

ArquitecturasAlgoritmosde Grafos

Traversal

Shortest Paths

Connectivity

Max Flow

GPUsFPGAs

Servidoresx86 multicore

ArquitecturasMultihilosmásicas

Cluster deMulticore

Clouds

Análisis deRedes Sociales

WWW

Biología Computacionañ

ComputaciónCientífica

Ingeniería

Halla entidades centralesDetección de comunidades

Dinámicas de redes

Data size

ProblemComplexity

Particionar grafosMatchingColoreado

Regulación de GenesRutas metabólicas

Genómica

MarketingBúsqueda social

CAD para VLSI Planear rutas

Page 11: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Esquema general de computar grafos

• graph sparsity (m/n ratio)• static/dynamic nature• weighted/unweighted, weight distribution• vertex degree distribution• directed/undirected• simple/multi/hyper graph• problem size• granularity of computation at nodes/edges• domain-specific characteristics

• paths• clusters• partitions• matchings• patterns• orderings

Input data

Problem: Find ***

Factors that influence choice of algorithm

Graph kernel

• traversal• shortest path algorithms• flow algorithms• spanning tree algorithms• topological sort …..

Graph problems are often recast as sparse linear algebra (e.g., partitioning) or linear programming (e.g., matching) computations

Page 12: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Definiciones y Representación Un grafo no dirigido G es un par (V,E), donde V es un

cjto. finito de puntos llamados vértices y E es un cjto. finito de aristas o arcos.

Una arista e ∈ E es un par no ordenado (u,v), u,v ∈ V. En un grafo dirigido, e es un par ordenado (u,v). Una

arista (u,v) es incidente del vértice u y es incidente a v. Una ruta del vértice v al u es una secuencia <v0,v1,v2,

…,vk> de vertices donde v0 = v, vk = u, y (vi, vi+1) ∈ E para i = 0, 1,…, k-1.

La longitud de la ruta está definida por el número de aristas en la ruta.

Page 13: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Definiciones y Representación

a) Grafo no dirigido (b) Grafo dirigido

Page 14: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Definiciones y Representación

Un grafo no dirigido está conectado si cada par de vértices está conectado por una ruta.

Un bosque es un grafo acíclico, y un árbol es un grafo conectado acíclico.

Un grafo que tiene pesos asociados con cada arista es un grafo ponderado.

Page 15: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Definiciones y Representación

Un grafo se puede representar por una matriz de adyacencia o una lista de aristas (o vértices).

Las matrices de adyacencia tienen un valor ai,j = 1 si los nodos i , j comparten una arista; 0 en caso contrario. En un grafo ponderado, ai,j = wi,j, el peso de la arista.

La lista de adyacencia para un grafo G = (V,E) consiste de un array Adj[1..|V|] de listas. Cada lista Adj[v] es una lista de todos los vértices adyac. a v.

Para un grafo de n nodos, la matriz de adyacencia ocupa espacio de Θ(n2) y la lista ocupa Θ(|E|).

Page 16: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Definiciones y Representación

Grafo no dirigido y su matriz de adyacencia

Grafo no dirigido y su lista de adyacencia

Page 17: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Minimum Spanning Tree

Un spanning tree de un grafo no dirigido G es un subgrafo de G que es un árbol que contiene todos los vértices de G.

Un un grafo ponderado, el peso de un subgrafo es la suma de los pesos de las aristas del subgrafo.

Un minimum spanning tree (MST) sería el spanning tree con peso mínimo.

Page 18: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Minimum Spanning Tree

Un grafo no dirigido y

su minimum spanning tree.

Page 19: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Minimum Spanning Tree: Algoritmo de Prim

Es un algoritmo goloso (greedy). Empieza escogiendo un vértice

arbitrario, y lo incluye en el actual MST.

Hace crecer al actual MST incorporando en él al vértice más cercano a uno de los vértices del actual MST.

Page 20: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Minimum Spanning Tree: Algoritmo de Prim

Page 21: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Minimum Spanning Tree: Algoritmo de Prim

Versión secuencial (no paralela)

Page 22: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo de Prim paralelo El “while”– es difícil ejecutarlos en paralelo. El “for” interno es más fácil de paralelizar. Sea p el

número de procs., y n el número de vértices. La matriz de adyacencia se particiona en bloques 1-D,

con el vector de distancia d particionado así también. En cada paso, el proc. escoge el nodo más cerca

localmente, luego se hace una reducción global para escoger el nodo más cercano global.

Se inserta ese nodo al MST, y se hace el broadcast respectivo a todos los procs.

Cada proc. actualiza su parte del vector d localmente.

Page 23: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo de Prim paralelo

La partición del vector de distancia d y la matriz de adyacencia A entre p procs.

Page 24: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo de Prim paralelo El costo de seleccionar el nodo más cercano es

O(n/p + log p). El costo del broadcast es O(log p). El costo de actualización local del vector d es

O(n/p). El tiempo paralelo por iteración es O(n/p + log p). El tiempo total paralelo es O(n2/p + n log p). La isoeficiencia es O(p2log2p).

Page 25: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Ruta más corta – un solo origen

En un grafo ponderado G = (V,E,w), el problema de la ruta más corta con un solo origen es encontrar las rutas más cortas de un vértice v ∈ V a los demás vértices en V.

El algoritmo de Dijkstra es parecido al de Prim. Mantiene un conjunto de nodos de los cuáles se sabe sus rutas más cortas.

Este conjunto crece basado en el nodo más cercano al origen usando uno de los nodos en el actual conjunto de ruta más corta.

Page 26: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo de Dijkstra

Algoritmo de Dijkstra, secuencial

Page 27: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo de Dijkstra paralelo

Similar a Prim paralelo para MST. La matriz de adyacencia ponderada se particiona

usando bloques 1-D. Cada proceso escoge, localmente, el nodo más

cercano al origen, seguido por una reducción global para escoger el siguiente nodo.

Se hace broadcast de ese nodo y del vector l actualizado a todos los procesadores

Performance paralela es idéntica al Prim paralelo

Page 28: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Rutas más cortas - todos los pares

Dado un grafo ponderado G(V,E,w), el problema de todos los pares de rutas más cortas es encontrar las rutas más cortas entre todos los pares de vértices vi, vj ∈ V.

Hay varios algoritmos que resuelven este problema.

Page 29: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Rutas más cortas - todos los pares:Algoritmo basado en MatMult

Considere la multiplicación de la matriz de adyacencia ponderada consigo misma – pero reemplaze las multiplicaciones de números x*y por sumas x+y, y las sumas x+y por min(x,y).

El “producto” de la matriz de adyacencia ponderada consigo misma = una matriz que contiene las rutas más cortas de longitud 2 entre cualquier par de nodos.

Luego, “ An ” contiene todas las rutas más cortas.

Page 30: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo basado en MatMult

Page 31: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo basado en MatMult

“An” es calculado doblando las potencias: A, A2, A4, A8, …

Se necesita log n MatMults, cada una se tarda O(n3).

Complejidad serial: O(n3log n). Hay mejores algoritmos, con complejidad

O(n3).

Page 32: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo basado en MatMult, en paralelo

Cada una de las log n MatMults se pueden hacer en paralelo.

Se pueden usar n3/log n procs para computar cada producto matriz-matriz en tiempo log n.

Tiempo total: O(log2n).

Page 33: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Dijkstra para todos los pares

Ejecutar n instancias de Dijkstra para 1 solo origen, uno para cada uno de los n vértices como origen.

Complejidad es O(n3).

Page 34: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Dijkstra para todos los pares, en paralelo

Hay dos estrategias para paralelizar – ejecutar cada uno de los n problemas de ruta más corta con un solo origen en un diferente procs. (partición de los orígenes), o usar la versión paralela de la ruta más corta con un solo origen (paralelizar cada origen).

Page 35: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Partición de los orígenes Use n procs, cada proc Pi calcula las rutas más

cortas desde el vértice vi a los demás vertices con Dijkstra secuencial.

No hay comunicación entre procesadores (suponiendo que la matriz de adyacencia esta replicada en todos los procs).

Tiempo paralelo: Θ(n2). Es de costo óptimo, pero solo puede usarse n

procs. La isoeficiencia es p3.

Page 36: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Paralelizar cada origen Cada ruta más corta de un solo origen es hecha

en paralelo. Se pueden usar hasta n2 procs. si combino con método anterior.

Dados p procs (p > n), cada problema individual es ejecutado por p/n procs.

Tomaría un tiempo de:

Costo óptimo p = O(n2/log n) , isoeficiencia es Θ((p log p)1.5)

Page 37: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo de Floyd Para cada par de vértices vi, vj ∈ V, considere

todas las rutas de vi a vj cuyos vértices intermedios pertenecen a {v1,v2,…,vk}. Sea pi

(,kj) (de peso di

(,kj) )

la ruta más corta de entre ellas. Si vk está en la ruta más corta de vi a vj, entonces

pi(,kj) es la misma que pi

(,kj-1)

Si vk está en pi(,kj), entonces podemos partir a pi

(,kj)

en 2 rutas – una de vi a vk y otra de vk a vj . Cada una de estas rutas usan vértices de {v1,v2,…,vk-1}.

Page 38: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo de FloydLa siguiente relación de recurrencia se observa:

Esta ecuación debe ser computada por cada par de nodos y para k = 1,…, n. Complejidad serial es de O(n3).

Page 39: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo de Floyd

Computa todas las rutas más cortas entre todos los pares de vértices del grafo G =

(V,E) con matriz de adyacencia A.

Page 40: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo de Floyd en paralelo con Bloques 2-D

Matriz D(k) se divide en p bloques de tamaño (n / √p) x (n / √p).

Cada proc. actualiza su parte de la matriz durante cada iteración.

Para computar dl(,kk-1) el proc Pi,j debe obtener dl

(,kk-1) and dk

(,kr-

1). En general, durante la iteración kesima, cada uno de los √p

procs conteniendo parte de la fila kesima la envía a los √p - 1 procs de la misma columna.

De la misma forma, cada uno de los √p procs que contienen parte de la kesima columna la envían a los √p - 1 procs de la misma fila.

Page 41: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo de Floyd en paralelo con Bloques 2-D

(a) Matriz D(k) distribuida en bloques 2-D mapeados así: √p x √p subbloques, (b) el subbloque de D(k) asignado al proc Pi,j

Page 42: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo de Floyd en paralelo con Bloques 2-D

(a) Patrones de comunicación en mapeo en bloques 2-D. Al computar di

(,kj), info debe mandarse a los procs subrayados

desde otros 2 procs en la misma fila y columna. (b) La fila y columna de √p procs que contiene la kesima fila y columna las

envía junto con columnas y filas.

Page 43: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo de Floyd en paralelo con Bloques 2-D

Floyd en paralelo usando blqoues 2-D. P*,j son todos los procs en la jesima columna, y Pi,* son todos los procs en la fila iesima. La matriz D(0) es la matrix de adyacencia

Page 44: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Algoritmo de Floyd en paralelo con Bloques 2-D

Durante cada iteración del algoritmo, la fila kesima y la columna kesima de procs hacen un broadcast 1-a-todos a lo largo de sus filas/columnas.

El tamaño del broadcast es n/√p elementos, tiempo: Θ((n log p)/ √p).

El paso de sincronizar toma Θ(log p). El tiempo de computación es Θ(n2/p). Tiempo paralelo de Floyd con bloques 2D es:

Page 45: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Se puede usar O(n2 / log2 n) procs a costo óptimo.

Isoeficiencia es Θ(p1.5 log3 p). Se puede mejorar si se relaja la

sincronización estricta luego de cada iteración.

Algoritmo de Floyd en paralelo con Bloques 2-D

Page 46: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Floyd acelerado con Pipelining

El paso de sincronización del Floyd paralelo se puede remover sina afectar los resultados.

Un proc comienza a trabajar en la kth iteración apenas se ha computado la iteración (k-1)esima y tiene partes relevantes de la matriz D(k-1)

Page 47: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Floyd acelerado con Pipelining

Asume que elproc 4 en el tiempo t acaba de computar de la columna kesima de la matriz D(k-1). Manda el segmento a procs 3 y 5. Estos procs reciben el

segmento en el momento t + 1 (1 tiempo= lo que tarda un segmento de un nodo a su vecino inmediato). Procs lejos del 4 reciben el segmento después. Proc 1 (en el boundary) no reenvía elemento después de

recibirlo.

Page 48: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Floyd acelerado con Pipelining En cada paso, n/√p elementos de la 1ra fila se envían desde Pi,j al

Pi+1,j.

Similarmente, elementos de la 1ra columna se envían de Pi,j al Pi,j+1. Cada paso demora: Θ(n/√p). Luego de Θ(√p) pasos, el proc P√p ,√p obtiene los elementos relevantes

de la 1ra cola y 1ra col en tpo Θ(n). Los valores de otras filas y cols siguen luego de Θ(n2/p) modo

pipeline. Proc P√p ,√p termina su parte de computación en Θ(n3/p) + Θ(n).

Cuando el proc P√p ,√p ha terminado en la iteración (n-1)th, envía los valores relevantes de la nth fila y columna a otros procs.

Page 49: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Floyd acelerado con Pipelining

Tiempo paralelo:

Usa hasta O(n2) procesadores eficientemente. Isoeficiencia es Θ(p1.5).

Page 50: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Comparación

La performance y escalabilidad de varios algoritmos se muestra.

Page 51: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Clausura transitiva (Transitive Closure)

Si G = (V,E) es un grafo, entonces la transitive closure de G es el grafo G* = (V,E*), donde E* = {(vi,vj) | hay un path del vi al vj en G}

La matriz de conectividad G es una matriz A* = (ai

*,j) tal que ai

*,j = 1 si hay alguna ruta de vi a vj a i

= j, y ai*,j = ∞ de otra manera.

Para computar A* se asigna un peso de 1 para cada arista E y se usa cualquiera de las rutas mas cortas - todos los pares.

Page 52: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Componentes conectados Los componentes conectados de un gafo no dirigido son las

clases equivalentes de vértices bajo la relación “es alcanzable desde”

Grafo con 3 componentes conectados: {1,2,3,4}, {5,6,7}, y {8,9}.

Page 53: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Usando alg. Depth-First Search Hacer DFS en el grafo para obtener un bosque-

cada árbol de la forest es un “connected component” separado

(b) Es un bosque obtenido de un trasverse DF del gráfico en (a).

Page 54: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Componentes conectados en paralelo

Particionar el grafo entre los procs y correr algoritmos independientes en cada proc. En este punto, tenemos p “spanning forests”.

En el segundo paso, se combinan estas “forest” de 2 en 2 hasta que solo quede 1.

Page 55: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Componentes conectados en paralelo

La matriz de adyacencia de G en (a) se particiona en dos (b). Cada proceso consigue un subgrafo de G ((c) y (e)). Cada proceso computa el spanning

forest de su subgrafo ((d) y (f)). Finalmente, los dos bosques se combinan en uno.

Page 56: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Componentes conectados en paralelo

Para unir pares de bosques, el algoritmo usa conjuntos disjuntos de aristas.

Definimos estas operaciones en esos conjuntos: find(x)

Devuelve un puntero al elemento representativo del cjto conteniendo x . Cada cjto tiene su propio y único representativo.

union(x, y) Une los conjuntos conteniendo los elementos x , y. se asume

que los dos cjtos eran disjuntos antes de esta operación.

Page 57: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Componentes conectados en paralelo

Para unir el bosque A con el B, para cada arista (u,v) de A, se efectúa una operación find para determinar si los vértices están en el mismo árbol de B.

Si no, los dos árboles (cjtos) de B conteniendo u y v se unen con una operación unión.

Caso contrario, no se hace “union”. Por lo tanto, unir A y B requiere no más de 2(n-1)

“find” y (n-1) “union”.

Page 58: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Componentes conectados: paralelo con Bloques 1-D

La matriz de adyacencia de tamaño n x n es particionada en p bloques.

Cada proc puede computar su “spanning forest” en tiempo Θ(n2/p).

Merging se hace incrustando un árbol logico en la topología. Hay log p etapas del merging, c/u. tarda Θ(n). el costo del merging es Θ(n log p).

En cada etapa, los “spanning forests” se envían entre vecinos. Ojo, se transmiten Θ(n) aristas de los “spanning forest”.

Page 59: Algoritmos paralelos de grafos y búsqueda (pt.1: grafos)

Componentes conectados: paralelo con Bloques 1-D

Tiempo en paralelo:

Para costo óptimo tengo p = O(n / log n). La isoeficiencia es Θ(p2 log2 p).