/// <summary> /// Creates a new pre-processor. /// </summary> /// <param name="target"></param> /// <param name="calculator"></param> /// <param name="witnessCalculator"></param> /// <param name="keepDirectNeighbours"></param> public CHPreProcessor(IDynamicGraphRouterDataSource <CHEdgeData> target, INodeWeightCalculator calculator, INodeWitnessCalculator witnessCalculator, bool keepDirectNeighbours) : this(target, calculator, witnessCalculator, true, 1) { }
/// <summary> /// Creates a new pre-processor. /// </summary> /// <param name="target"></param> /// <param name="calculator"></param> /// <param name="witnessCalculator"></param> public CHPreProcessor(IDynamicGraphRouterDataSource <CHEdgeData> target, INodeWeightCalculator calculator, INodeWitnessCalculator witnessCalculator) { _comparer = new CHEdgeDataComparer(); _target = target; _calculator = calculator; _witnessCalculator = witnessCalculator; _queue = new CHPriorityQueue(); _contracted = new bool[1000]; }
/// <summary> /// Creates a new pre-processor. /// </summary> /// <param name="target"></param> /// <param name="calculator"></param> /// <param name="witnessCalculator"></param> public CHPreprocessor(GraphBase <CHEdgeData> target, INodeWeightCalculator calculator, INodeWitnessCalculator witnessCalculator) { _target = target; _calculator = calculator; _witnessCalculator = witnessCalculator; _queue = new BinaryHeap <uint>(target.VertexCount + (uint)System.Math.Max(target.VertexCount * 0.1, 5)); _lowestPriorities = new float[target.VertexCount + (uint)System.Math.Max(target.VertexCount * 0.1, 5)]; for (int idx = 0; idx < _lowestPriorities.Length; idx++) { // uncontracted = priority != float.MinValue. _lowestPriorities[idx] = float.MaxValue; } }
/// <summary> /// Creates a new pre-processor. /// </summary> /// <param name="target"></param> /// <param name="calculator"></param> /// <param name="witnessCalculator"></param> /// <param name="keepReverseEdges"></param> public CHPreProcessor(IDynamicGraph <CHEdgeData> target, INodeWeightCalculator calculator, INodeWitnessCalculator witnessCalculator, bool keepReverseEdges) { _comparer = new CHEdgeDataComparer(); _target = target; _calculator = calculator; _witnessCalculator = witnessCalculator; _queue = new CHPriorityQueue(); _contracted = new bool[1000]; _keepReverseEdges = keepReverseEdges; }
/// <summary> /// Creates a new pre-processor. /// </summary> /// <param name="target"></param> /// <param name="calculator"></param> /// <param name="witnessCalculator"></param> public CHPreprocessor(GraphBase<CHEdgeData> target, INodeWeightCalculator calculator, INodeWitnessCalculator witnessCalculator) { _target = target; _calculator = calculator; _witnessCalculator = witnessCalculator; _queue = new BinaryHeap<uint>(target.VertexCount + (uint)System.Math.Max(target.VertexCount * 0.1, 5)); _lowestPriorities = new float[target.VertexCount + (uint)System.Math.Max(target.VertexCount * 0.1, 5)]; for (int idx = 0; idx < _lowestPriorities.Length; idx++) { // uncontracted = priority != float.MinValue. _lowestPriorities[idx] = float.MaxValue; } }
/// <summary> /// Creates a new pre-processor. /// </summary> /// <param name="target"></param> /// <param name="calculator"></param> /// <param name="witnessCalculator"></param> /// <param name="keepDirectNeighbours"></param> public CHPreProcessor(IDynamicGraphRouterDataSource <CHEdgeData> target, INodeWeightCalculator calculator, INodeWitnessCalculator witnessCalculator, bool keepDirectNeighbours, double preProcessingPercentage) { _comparer = new CHEdgeDataComparer(); _keepDirectNeighbours = keepDirectNeighbours; _target = target; _calculator = calculator; _witnessCalculator = witnessCalculator; _preProcessingPercentage = preProcessingPercentage; _queue = new CHPriorityQueue(); _contracted = new bool[1000]; }
/// <summary> /// Creates a new pre-processor. /// </summary> /// <param name="target"></param> /// <param name="calculator"></param> /// <param name="witnessCalculator"></param> public CHPreProcessor(IDynamicGraphRouterDataSource<CHEdgeData> target, INodeWeightCalculator calculator, INodeWitnessCalculator witnessCalculator) : this(target, calculator, witnessCalculator, true) { }
/// <summary> /// Creates a new pre-processor. /// </summary> /// <param name="target"></param> /// <param name="calculator"></param> /// <param name="witnessCalculator"></param> /// <param name="keepDirectNeighbours"></param> public CHPreProcessor(IDynamicGraphRouterDataSource<CHEdgeData> target, INodeWeightCalculator calculator, INodeWitnessCalculator witnessCalculator, bool keepDirectNeighbours) : this(target, calculator, witnessCalculator, true, 1) { }
/// <summary> /// Creates a new pre-processor. /// </summary> /// <param name="target"></param> /// <param name="calculator"></param> /// <param name="witnessCalculator"></param> /// <param name="keepDirectNeighbours"></param> public CHPreProcessor(IDynamicGraphRouterDataSource<CHEdgeData> target, INodeWeightCalculator calculator, INodeWitnessCalculator witnessCalculator, bool keepDirectNeighbours, double preProcessingPercentage) { _comparer = new CHEdgeDataComparer(); _keepDirectNeighbours = keepDirectNeighbours; _target = target; _calculator = calculator; _witnessCalculator = witnessCalculator; _preProcessingPercentage = preProcessingPercentage; _queue = new CHPriorityQueue(); _contracted = new bool[1000]; }
/// <summary> /// Creates a new pre-processor. /// </summary> /// <param name="target"></param> /// <param name="calculator"></param> /// <param name="witnessCalculator"></param> /// <param name="keepReverseEdges"></param> public CHPreProcessor(IDynamicGraphRouterDataSource<CHEdgeData> target, INodeWeightCalculator calculator, INodeWitnessCalculator witnessCalculator, bool keepReverseEdges) { _comparer = new CHEdgeDataComparer(); _target = target; _calculator = calculator; _witnessCalculator = witnessCalculator; _queue = new CHPriorityQueue(); _contracted = new bool[1000]; }
/// <summary> /// Creates a new pre-processor. /// </summary> /// <param name="target"></param> /// <param name="calculator"></param> /// <param name="witnessCalculator"></param> public CHPreProcessor(IDynamicGraphRouterDataSource <CHEdgeData> target, INodeWeightCalculator calculator, INodeWitnessCalculator witnessCalculator) : this(target, calculator, witnessCalculator, true) { }
/// <summary> /// Creates a new pre-processor. /// </summary> /// <param name="target"></param> /// <param name="calculator"></param> /// <param name="witnessCalculator"></param> public CHPreProcessor(IDynamicGraph <CHEdgeData> target, INodeWeightCalculator calculator, INodeWitnessCalculator witnessCalculator) : this(target, calculator, witnessCalculator, false) { }
public void TestCHEdgeDifferenceContractions() { IOsmRoutingInterpreter interpreter = new OsmSharp.Routing.Osm.Interpreter.OsmRoutingInterpreter(); CHPreProcessor processor = this.BuildCHPreProcessor(interpreter); //processor.InitializeQueue(); INodeWeightCalculator edgeDifference = processor.NodeWeightCalculator; Assert.AreEqual(1, edgeDifference.Calculate(1)); // witness paths from 2<->4. Assert.AreEqual(6, edgeDifference.Calculate(2)); Assert.AreEqual(0, edgeDifference.Calculate(3)); Assert.AreEqual(0, edgeDifference.Calculate(4)); Assert.AreEqual(0, edgeDifference.Calculate(5)); Assert.AreEqual(0, edgeDifference.Calculate(6)); Assert.AreEqual(3, edgeDifference.Calculate(7)); Assert.AreEqual(3, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(3, edgeDifference.Calculate(10)); Assert.AreEqual(3, edgeDifference.Calculate(11)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(3, edgeDifference.Calculate(16)); Assert.AreEqual(0, edgeDifference.Calculate(17)); Assert.AreEqual(0, edgeDifference.Calculate(18)); Assert.AreEqual(0, edgeDifference.Calculate(19)); Assert.AreEqual(-1, edgeDifference.Calculate(20)); Assert.AreEqual(0, edgeDifference.Calculate(21)); Assert.AreEqual(0, edgeDifference.Calculate(22)); Assert.AreEqual(-1, edgeDifference.Calculate(23)); // contract 20. processor.Contract(20); Assert.AreEqual(1, edgeDifference.Calculate(1)); // witness paths from 2<->4. Assert.AreEqual(6, edgeDifference.Calculate(2)); Assert.AreEqual(0, edgeDifference.Calculate(3)); Assert.AreEqual(0, edgeDifference.Calculate(4)); Assert.AreEqual(0, edgeDifference.Calculate(5)); Assert.AreEqual(0, edgeDifference.Calculate(6)); Assert.AreEqual(3, edgeDifference.Calculate(7)); Assert.AreEqual(3, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(3, edgeDifference.Calculate(10)); Assert.AreEqual(3, edgeDifference.Calculate(11)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(3, edgeDifference.Calculate(16)); Assert.AreEqual(0, edgeDifference.Calculate(17)); Assert.AreEqual(0, edgeDifference.Calculate(18)); Assert.AreEqual(0, edgeDifference.Calculate(19)); Assert.AreEqual(-1, edgeDifference.Calculate(21)); Assert.AreEqual(0, edgeDifference.Calculate(22)); Assert.AreEqual(-1, edgeDifference.Calculate(23)); // contract 21. processor.Contract(21); Assert.AreEqual(1, edgeDifference.Calculate(1)); // witness paths from 2<->4. Assert.AreEqual(6, edgeDifference.Calculate(2)); Assert.AreEqual(0, edgeDifference.Calculate(3)); Assert.AreEqual(0, edgeDifference.Calculate(4)); Assert.AreEqual(0, edgeDifference.Calculate(5)); Assert.AreEqual(0, edgeDifference.Calculate(6)); Assert.AreEqual(3, edgeDifference.Calculate(7)); Assert.AreEqual(3, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(3, edgeDifference.Calculate(10)); Assert.AreEqual(3, edgeDifference.Calculate(11)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(0, edgeDifference.Calculate(16)); Assert.AreEqual(0, edgeDifference.Calculate(17)); Assert.AreEqual(0, edgeDifference.Calculate(18)); Assert.AreEqual(0, edgeDifference.Calculate(19)); Assert.AreEqual(0, edgeDifference.Calculate(22)); Assert.AreEqual(-1, edgeDifference.Calculate(23)); // contract 23. processor.Contract(23); Assert.AreEqual(1, edgeDifference.Calculate(1)); // witness paths from 2<->4. Assert.AreEqual(6, edgeDifference.Calculate(2)); Assert.AreEqual(0, edgeDifference.Calculate(3)); Assert.AreEqual(0, edgeDifference.Calculate(4)); Assert.AreEqual(0, edgeDifference.Calculate(5)); Assert.AreEqual(0, edgeDifference.Calculate(6)); Assert.AreEqual(3, edgeDifference.Calculate(7)); Assert.AreEqual(3, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(3, edgeDifference.Calculate(10)); Assert.AreEqual(3, edgeDifference.Calculate(11)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(0, edgeDifference.Calculate(16)); Assert.AreEqual(0, edgeDifference.Calculate(17)); Assert.AreEqual(0, edgeDifference.Calculate(18)); Assert.AreEqual(0, edgeDifference.Calculate(19)); Assert.AreEqual(-1, edgeDifference.Calculate(22)); // contract 22. processor.Contract(22); Assert.AreEqual(1, edgeDifference.Calculate(1)); // witness paths from 2<->4. Assert.AreEqual(6, edgeDifference.Calculate(2)); Assert.AreEqual(0, edgeDifference.Calculate(3)); Assert.AreEqual(0, edgeDifference.Calculate(4)); Assert.AreEqual(0, edgeDifference.Calculate(5)); Assert.AreEqual(0, edgeDifference.Calculate(6)); Assert.AreEqual(3, edgeDifference.Calculate(7)); Assert.AreEqual(3, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(3, edgeDifference.Calculate(10)); Assert.AreEqual(3, edgeDifference.Calculate(11)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(-1, edgeDifference.Calculate(16)); Assert.AreEqual(0, edgeDifference.Calculate(17)); Assert.AreEqual(0, edgeDifference.Calculate(18)); Assert.AreEqual(0, edgeDifference.Calculate(19)); // contract 16. processor.Contract(16); Assert.AreEqual(1, edgeDifference.Calculate(1)); // witness paths from 2<->4. Assert.AreEqual(6, edgeDifference.Calculate(2)); Assert.AreEqual(0, edgeDifference.Calculate(3)); Assert.AreEqual(0, edgeDifference.Calculate(4)); Assert.AreEqual(0, edgeDifference.Calculate(5)); Assert.AreEqual(0, edgeDifference.Calculate(6)); Assert.AreEqual(3, edgeDifference.Calculate(7)); Assert.AreEqual(3, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(3, edgeDifference.Calculate(10)); Assert.AreEqual(3, edgeDifference.Calculate(11)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(-1, edgeDifference.Calculate(17)); Assert.AreEqual(0, edgeDifference.Calculate(18)); Assert.AreEqual(0, edgeDifference.Calculate(19)); // contract 17. processor.Contract(17); Assert.AreEqual(1, edgeDifference.Calculate(1)); // witness paths from 2<->4. Assert.AreEqual(6, edgeDifference.Calculate(2)); Assert.AreEqual(0, edgeDifference.Calculate(3)); Assert.AreEqual(0, edgeDifference.Calculate(4)); Assert.AreEqual(0, edgeDifference.Calculate(5)); Assert.AreEqual(0, edgeDifference.Calculate(6)); Assert.AreEqual(0, edgeDifference.Calculate(7)); Assert.AreEqual(3, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(3, edgeDifference.Calculate(10)); Assert.AreEqual(3, edgeDifference.Calculate(11)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(0, edgeDifference.Calculate(18)); Assert.AreEqual(0, edgeDifference.Calculate(19)); processor.Contract(3); Assert.AreEqual(1, edgeDifference.Calculate(1)); // witness paths from 2<->4. Assert.AreEqual(6, edgeDifference.Calculate(2)); Assert.AreEqual(-2, edgeDifference.Calculate(4)); Assert.AreEqual(0, edgeDifference.Calculate(5)); Assert.AreEqual(0, edgeDifference.Calculate(6)); Assert.AreEqual(0, edgeDifference.Calculate(7)); Assert.AreEqual(3, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(3, edgeDifference.Calculate(10)); Assert.AreEqual(3, edgeDifference.Calculate(11)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(0, edgeDifference.Calculate(18)); Assert.AreEqual(0, edgeDifference.Calculate(19)); processor.Contract(4); Assert.AreEqual(0, edgeDifference.Calculate(1)); // witness paths from 2<->4. Assert.AreEqual(3, edgeDifference.Calculate(2)); Assert.AreEqual(0, edgeDifference.Calculate(5)); Assert.AreEqual(0, edgeDifference.Calculate(6)); Assert.AreEqual(0, edgeDifference.Calculate(7)); Assert.AreEqual(3, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(3, edgeDifference.Calculate(10)); Assert.AreEqual(3, edgeDifference.Calculate(11)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(0, edgeDifference.Calculate(18)); Assert.AreEqual(0, edgeDifference.Calculate(19)); processor.Contract(1); Assert.AreEqual(1, edgeDifference.Calculate(2)); // witness paths from 11<->5. Assert.AreEqual(-2, edgeDifference.Calculate(5)); // witness paths from 11<->6. Assert.AreEqual(0, edgeDifference.Calculate(6)); Assert.AreEqual(0, edgeDifference.Calculate(7)); Assert.AreEqual(3, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(3, edgeDifference.Calculate(10)); Assert.AreEqual(3, edgeDifference.Calculate(11)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(0, edgeDifference.Calculate(18)); Assert.AreEqual(0, edgeDifference.Calculate(19)); processor.Contract(5); Assert.AreEqual(1, edgeDifference.Calculate(2)); // witness paths from 11<->5. Assert.AreEqual(-2, edgeDifference.Calculate(6)); Assert.AreEqual(0, edgeDifference.Calculate(7)); Assert.AreEqual(3, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(3, edgeDifference.Calculate(10)); Assert.AreEqual(3, edgeDifference.Calculate(11)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(0, edgeDifference.Calculate(18)); Assert.AreEqual(0, edgeDifference.Calculate(19)); processor.Contract(6); Assert.AreEqual(0, edgeDifference.Calculate(2)); // witness paths from 11<->5. Assert.AreEqual(-1, edgeDifference.Calculate(7)); Assert.AreEqual(3, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(3, edgeDifference.Calculate(10)); Assert.AreEqual(3, edgeDifference.Calculate(11)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(0, edgeDifference.Calculate(18)); Assert.AreEqual(0, edgeDifference.Calculate(19)); processor.Contract(7); Assert.AreEqual(0, edgeDifference.Calculate(2)); // witness paths from 11<->5. Assert.AreEqual(3, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(3, edgeDifference.Calculate(10)); Assert.AreEqual(0, edgeDifference.Calculate(11)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(0, edgeDifference.Calculate(18)); Assert.AreEqual(0, edgeDifference.Calculate(19)); processor.Contract(2); Assert.AreEqual(3, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(3, edgeDifference.Calculate(10)); Assert.AreEqual(-2, edgeDifference.Calculate(11)); // witness paths from 18<->10. Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(0, edgeDifference.Calculate(18)); Assert.AreEqual(0, edgeDifference.Calculate(19)); processor.Contract(11); Assert.AreEqual(3, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(1, edgeDifference.Calculate(10)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(-2, edgeDifference.Calculate(18)); // witness paths from 10<->8. Assert.AreEqual(0, edgeDifference.Calculate(19)); processor.Contract(18); Assert.AreEqual(0, edgeDifference.Calculate(8)); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(0, edgeDifference.Calculate(10)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(0, edgeDifference.Calculate(19)); processor.Contract(8); Assert.AreEqual(0, edgeDifference.Calculate(9)); Assert.AreEqual(0, edgeDifference.Calculate(10)); Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(0, edgeDifference.Calculate(19)); processor.Contract(9); Assert.AreEqual(-2, edgeDifference.Calculate(10)); // witness paths from 19<->12. Assert.AreEqual(0, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(-2, edgeDifference.Calculate(19)); // witness paths from 15<->10. processor.Contract(10); Assert.AreEqual(-2, edgeDifference.Calculate(12)); Assert.AreEqual(0, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(-2, edgeDifference.Calculate(19)); // witness paths from 15<->10. processor.Contract(12); Assert.AreEqual(-1, edgeDifference.Calculate(13)); Assert.AreEqual(0, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(-1, edgeDifference.Calculate(19)); // witness paths from 15<->10. processor.Contract(13); Assert.AreEqual(-1, edgeDifference.Calculate(14)); Assert.AreEqual(0, edgeDifference.Calculate(15)); Assert.AreEqual(-1, edgeDifference.Calculate(19)); // witness paths from 15<->10. processor.Contract(14); Assert.AreEqual(-1, edgeDifference.Calculate(15)); Assert.AreEqual(-1, edgeDifference.Calculate(19)); // witness paths from 15<->10. processor.Contract(15); Assert.AreEqual(0, edgeDifference.Calculate(19)); processor.Contract(19); }
/// <summary> /// Creates a new pre-processor. /// </summary> /// <param name="target"></param> /// <param name="calculator"></param> /// <param name="witness_calculator"></param> /// <param name="max"></param> public CHPreProcessor(IDynamicGraph<CHEdgeData> target, INodeWeightCalculator calculator, INodeWitnessCalculator witness_calculator, int max) { _comparer = new CHEdgeDataComparer(); _target = target; _calculator = calculator; _witness_calculator = witness_calculator; _queue = new CHPriorityQueue(); _contracted = new bool[1000]; }
/// <summary> /// Creates a new pre-processor. /// </summary> /// <param name="target"></param> /// <param name="calculator"></param> /// <param name="witnessCalculator"></param> public CHPreProcessor(IDynamicGraph<CHEdgeData> target, INodeWeightCalculator calculator, INodeWitnessCalculator witnessCalculator) : this(target, calculator, witnessCalculator, false) { }