Una opinión: El ordenamiento es razonablemente sencillo, y puede escalarse. Si no necesitas dibujar el recorrido, no se necesita tanto detalle geográfico. La complejidad real, pasa por asociar un string que representa un domicilio, con una calle y altura conocidas.
Sería: - Para cada pieza, asociar la calle y altura correspondiente, en el sentido de que se ha interpretado el domicilio. - Separar los subconjuntos, en base a la "zona" que se obtiene a partir del domicilio normalizado. (ojo, que mantener esta información no es fácil, pero es posible) (el concepto de Zona, es naturalmente autoreferente: cada zona, forma parte de otra zona mas grande) . - Ordenar cada subconjunto. Acá recién es donde aparecen los mecanismos de ordenamiento, que no necesitan ser tan complejos, al menos en una primera instancia. De hecho, parece que Camino crítico y el resto, son demasiada artillería para esto. Entonces, una vez "leido" el domicilio, el resto es manejable. SI el segundo paso se puede hacer antes que el primero, reduce mucho la complejidad de la "lectura". El problema es leer el domicilio, y asociarlo a información geométrica. Ya sea el CPA, o alguna representación que tengas de las calles. La dificultad pasa por la ambiguedad con que suele representarse esta información (nombres de calles mal escritos, abreviaturas, calles con nombres parecidos, etc) que requieren una evaluación del contexto. Esta evaluación de contexto es natural para un ser humano, pero dificil de codificar. Pero hay esperanza, de hecho hay servicios diseñados para realizar esta labor, que logran proporciones de acierto mayores al 90%. Una interface adecuada, para que un operador arbitre, y algo de heurística, podría cerrar el paquete. Sin duda, que es un tema muy divertido, que depende criticamente de la calidad del diseño tanto de algoritmos como de estructuras de datos. Por eso es que se han prendido tantos. Saludos Ivan