Laboratorio de Análisis y Diseño de Algoritmos Distribuidos en Redes

Anuncio
Laboratorio de Análisis y Diseño de Algoritmos Distribuidos en Redes 2016 Objetivo Diseñar un algoritmo distribuido complejo, analizar su complejidad y correctitud y verificar los resultados en un simulador. Algoritmo El propósito del algoritmo ​
NuncaViNadaMasParecidoABittorrent ​
es compartir arrays de enteros entre un conjunto de nodos conectados por una red según los siguientes requerimientos: ● Los nodos se encuentran conectados en un anillo bidireccional con una cantidad S de atajos. ● Al comenzar a ejecutarse el algoritmo, un conjunto de arrays, todos distintos, se encuentran distribuidos aleatoriamente entre los nodos de una red. (Es decir, cada nodo "nace" con 0 o más arrays ya almacenados.) ● Cada nodo de la red conoce los hash de un conjunto aleatório de los arrays que se encuentran en la red. Debajo se describe cómo computar dicho hash. ● Al finalizar la ejecución del algoritmo, cada uno de los nodos debe tener almacenado el array correspondiente a cada uno de los hash que conocía al comienzo del algoritmo. ● Los arrays solo pueden transmitirse de a un entero a la vez. ● Los nodos tienen un identificador único. ● Los arrays son de tipo ​
int​
y de largo 100. ● Cada nodo tiene espacio en memoria para los hash que conoce, para la cantidad de arrays correspondientes, y para una cantidad H de otros hashes y una cantidad A de otros arrays. Se pide ●
●
●
●
●
Diseñe un algoritmo que implemente los requerimientos anteriores y que evite "free riders" (es decir, nodos que solo consuman información) y que minimice la complejidad en tiempo. Analice su correctitud. Analice su complejidad en bits. Analice su complejidad en tiempo. Implemente el algoritmo diseñado en el simulador DisJ ●
Valide su análisis en el simulador. Cómputo del Hash El hash de cada array se computa según el método java.util.Arrays.hashCode(​
)​
del runtime de Java. 3465 public static int hashCode(int a[]) { 3466 if (a == null) 3467 return 0; 3468 3469 int result = 1; 3470 for (int element : a) 3471 result = 31 * result + element; 3472 3473 return result; 3474 } 
Descargar