double GetBaricenterBelow(int v) { int outEdgesCount = ProperLayeredGraph.OutEdgesCount(v); Debug.Assert(outEdgesCount > 0); return((from edge in ProperLayeredGraph.OutEdges(v) select XPosition(edge.Target)).Sum() / outEdgesCount); }
float WMedian(int node, bool theMedianGoingDown) { IEnumerable <LayerEdge> edges; int p; if (theMedianGoingDown) { edges = properLayeredGraph.OutEdges(node); p = properLayeredGraph.OutEdgesCount(node); } else { edges = properLayeredGraph.InEdges(node); p = properLayeredGraph.InEdgesCount(node); } if (p == 0) { return(-1.0f); } var parray = new int[p]; //we have no multiple edges int i = 0; if (theMedianGoingDown) { foreach (LayerEdge e in edges) { parray[i++] = X[e.Target]; } } else { foreach (LayerEdge e in edges) { parray[i++] = X[e.Source]; } } Array.Sort(parray); int m = p / 2; if (p % 2 == 1) { return(parray[m]); } if (p == 2) { return(0.5f * ((float)parray[0] + (float)parray[1])); } float left = parray[m - 1] - parray[0]; float right = parray[p - 1] - parray[m]; return(((float)parray[m - 1] * left + (float)parray[m] * right) / (left + right)); }
void AllocArrays() { int n = properLayeredGraph.NodeCount; P = new List <int> [n]; S = new List <int> [n]; POrder = new Dictionary <int, int> [n]; SOrder = new Dictionary <int, int> [n]; if (hasCrossWeights) { outCrossingCount = new Dictionary <int, int> [n]; inCrossingCount = new Dictionary <int, int> [n]; } for (int i = 0; i < n; i++) { int count = properLayeredGraph.InEdgesCount(i); P[i] = new List <int>(); if (hasCrossWeights) { Dictionary <int, int> inCounts = inCrossingCount[i] = new Dictionary <int, int>(count); foreach (LayerEdge le in properLayeredGraph.InEdges(i)) { inCounts[le.Source] = le.CrossingWeight; } } POrder[i] = new Dictionary <int, int>(count); count = properLayeredGraph.OutEdgesCount(i); S[i] = new List <int>(); SOrder[i] = new Dictionary <int, int>(count); if (hasCrossWeights) { Dictionary <int, int> outCounts = outCrossingCount[i] = new Dictionary <int, int>(count); foreach (LayerEdge le in properLayeredGraph.OutEdges(i)) { outCounts[le.Target] = le.CrossingWeight; } } } }
private int NumberOfInEdges(int v) { return(this.BT ? graph.InEdgesCount(v) : graph.OutEdgesCount(v)); }