Beispiel #1
0
        // (N - 1)(N + log(N)) = (N^2 + Nlog(N) - N - log(N)) = O(N^2)
        private void UpdateDijkstraElements(DijkstraElement definitiveDijkstraElement)
        {
            int destinationIndex;

            foreach (Edge currentVertexEdge in definitiveDijkstraElement.IDVertex.EdgeList)
            {
                destinationIndex = DijkstraElements.FindIndex(DijkstraElement => DijkstraElement.IDVertex == currentVertexEdge.Destination);

                if (currentVertexEdge.Weight + definitiveDijkstraElement.AccumulatedDistance < DijkstraElements[destinationIndex].AccumulatedDistance)
                {
                    DijkstraElements[destinationIndex].AccumulatedDistance     = currentVertexEdge.Weight + definitiveDijkstraElement.AccumulatedDistance;
                    DijkstraElements[destinationIndex].PreviousDijkstraElement = definitiveDijkstraElement;

                    RelocateDijkstraElement(destinationIndex);
                }
            }
        }
Beispiel #2
0
        // log(N)
        private void RelocateDijkstraElement(int index)
        {
            DijkstraElement temporalDijkstraElement = DijkstraElements[index];
            int             newIndex;

            DijkstraElements.RemoveAt(index);

            newIndex = DijkstraElements.BinarySearch(temporalDijkstraElement, new CompareDijkstraElementsByAccumulatedDistance());

            if (newIndex < 0)
            {
                DijkstraElements.Insert(~newIndex, temporalDijkstraElement);
            }
            else
            {
                DijkstraElements.Insert(newIndex, temporalDijkstraElement);
            }
        }