Se usará el algoritmo de Dijkstra imlpementado usando un Binary heap orientado mínimo. En el peor de los casos cada vértice del grafo estará conectado con todos los demás, es decir V-1 conexiones tendría cada vértice, llamemos a este número como N. Hallar y actualizar el peso de un vértice adyacente en binary heap es LogV por lo que la complejidad para actualizar el peso de todos los vértices adyacentes a un vértice origen es N*LogV. En total si actualizan los V vértices la complejidad resultante es O(VN*LogV). Para hallar las estaciones más cercanas primero sectorizamos las estaciones en 100 sectores, en promedio la complejidad de buscar la más cercana es 0(S/50) buscando en los dos sectores correspondientes, esto en Big-O en total es O(S + VN*LogV).
2A- Camino más corto (menos vértices)
Se usa el algoritmo DFS para armar el grafo dirigido que nos da la dirección más corta entre el vértice inicial y todos los demás, esto es proporcional al número de vértices más el número de arcos. Luego se encuentra la ruta lo que toma tiempo proporcional a la distancia total de la ruta. Si A es la cantidad de arcos, V la de vértices y L la distancia de la ruta encontrada, la complejidad es: O( A + V + L).
3B- N estaciones más congestionadas
Double N. Número de estaciones En la carga de datos se crea un Binary Heap Max-Oriented de estaciones por congestión. Luego se pide el máximo las N veces que se necesitan, con complejidad O(NLogS) siendo S el número de estaciones. Se debería insertar las N estaciones sacadas para que el método se pueda usar más de una vez. Esto tiene complejidad de O(NlogS) en el peor caso, por lo que la complejidad total sigue siendo O(NlogS) en Big-O.
4B- Grafo de rutas mínimas que conectan N estaciones
Double N. Número de estaciones. Para esto se encuentra el árbol de rutas mínimas para cada estación, usando Dijkstra, en total deberían ser N arboles hallados para que todas las estaciones se conecten entre sí. La complejidad total es el tiempo en encontrar un árbol por el número de veces que se busca, más la cantidad de rutas encontradas (C) por la longitud promedio L de cada ruta: O O(V(N^2)*LogV+CL) .
5C- Crear grafo de viajes de bicicletas y persistirlo con JSON
Se recorrerá la lista de viajes y en cada iteración se actualiza la información del vértice correspondiente si este existe, en caso contrario se crea el vértice con la información nueva. La complejidad de esto es proporcional al número de viajes hechos. O(N) El esquema JSON para persistir el grafo tiene el siguiente formato: [ {“id”: <id Station 1> “Vértices con origen en esta estación”: [ {“Id destino”: <Id estación destino vértice 1>, “Duración”: <Promedio duración vértice 1> },
{“Id destino”: <Id estación destino vértice 2>,
“Duración”: <Promedio duración vértice 2> }, . . . ] }, { “id”: <id Station 2> “Vértices con origen en esta estación”: [ {“Id destino”: <Id estación destino vértice 1>, “Duración”: <Promedio duración vértice 1> },
{“Id destino”: <Id estación destino vértice 2>,
“Duración”: <Promedio duración vértice 2> }, . . . ] }, . . . { “id”: <id Station N> “Vértices con origen en esta estación”: [ {“Id destino”: <Id estación destino vértice 1>, “Duración”: <Promedio duración vértice 1> },