La aproximación ingenua consiste en calcular la distancia de cada vértice a cada vértice. Debido a que hay
posibles conexiones que deben ser verificadas, la complejidad temporal del algoritmo ingenuo es
. Las muestras son generadas usando un generador de números aleatorios (GNA) en
. Prácticamente, uno puede implementar esto utilizando generadores de números aleatorios en
, un GNA para cada dimensión
V := generateSamples(n) // Genera n muestras en el cubo unitario.
for each p ∈ V do
for each q ∈ V\{p} do
if distance(p, q) ≤ r then
addConnection(p, q) // Añadir el lado (p,q) a cada lado de la estructura de dato.
end if
end for
end for
Dado que este algoritmo no es escalable (cada vértice necesita información de cada uno de los otros vértices), Holtgrewe et al. y Funke et al. presentaron nuevos algoritmos para este problema.
Este algoritmo, que fue propuesto por Holtgrewe et al., fue el primer algoritmo generador distribuido GGA para dimensión 2.[4] Este divide un cuadrado de lado 1 en celdas del mismo tamaño de al menos
. Para un número dado
de procesadores, a cada procesador se le asigna
celdas, donde
Por simplicidad,
se asume como el cuadrado de un número, pero puede ser generalizado para cualquier número de procesadores. Cada procesador genera
vértices, que son distribuidos a sus respectivos propietarios. Entonces, los vértices son ordenados bajo el criterio del número de celda asignado, por ejemplo con el algoritmo de ordenamiento rápido. Luego, cada procesador envia información a sus procesadores adyacentes acerca de los vértices en las células que están en los bordes, de modo que cada una de estas unidades procesadoras puede calcular los lados en su partición independientemente de otras unidades. El tiempo de ejecución esperado es de
. Un límite superior para el costo de comunicación de este algoritmo está dado por
dónde
denota el tiempo para una comunicación de todos-con-todos con mensajes de longitud l bits con c compañeros de comunicación.
Debido a que este algoritmo no es de comunicación libre, Funke et. al. propusieron[5] un GGA generador para altas dimensiones, que funciona sin comunicación entre las unidades procesadoras.
La aproximación utilizada en este algoritmo[6] es similar a la usada por Holtgrewe: Dividir un cubo de lado unitario en pedazos del mismo tamaño de por lo menos r. En d = 2 serían cuadrados, en d = 3 estos serían cubos. Como puede encajar
pedazos por dimensión, es número de pedazos está limitado a
. Como antes, a cada procesador se le asigna
pedazos. Para lograr un proceso libre de comunicación, cada procesador debe generar la misma cantidad de vértices en los pedazos adyacentes explotando la pseudoaleatoriedad de funciones hash con semillas. De este modo, cada procesador calcula la misma cantidad de vértices y no hay necesidad de intercambiar información con las esquinas
Para la dimensión 3, Funke et al. mostraron que el tiempo de ejecución esperado es
, sin costo de comunicación entre las unidades de procesamiento.