public void Calculate() { double iclusteringCoefficient = 0; int iEdgeCountForFullness = 0, iNeighbourCount = 0; for (int i = 0; i < container.Size; ++i) { iNeighbourCount = container.GetVertexDegree(i); if (iNeighbourCount != 0) { iEdgeCountForFullness = (iNeighbourCount == 1) ? 1 : iNeighbourCount * (iNeighbourCount - 1) / 2; iclusteringCoefficient = (edgesBetweenNeighbours[i]) / iEdgeCountForFullness; CoefficientsPerVertex.Add(i, Math.Round(iclusteringCoefficient, 3)); } else { CoefficientsPerVertex.Add(i, 0); } } for (int i = 0; i < container.Size; ++i) { double result = CoefficientsPerVertex[(uint)i]; if (CoefficientsDistribution.Keys.Contains(result)) { CoefficientsDistribution[CoefficientsPerVertex[i]]++; } else { CoefficientsDistribution[CoefficientsPerVertex[i]] = 1; } } }
private Double[] CalculateProbabilities() { Double[] result = new Double[container.Size]; Double graphDegree = (Double)container.GetVertexDegreeSum(); if (graphDegree != 0) { for (Int32 i = 0; i < result.Length; ++i) { result[i] = (Double)container.GetVertexDegree(i) / graphDegree; } } else { for (Int32 i = 0; i < result.Length; ++i) { result[i] = 1.0 / result.Length; } } return(result); }
private int get_vertex_to_connect(int current_vertex, List <double> fitnesses_, DistributedRandom distributed_random_) { double sum = 0; for (int i = 0; i < current_vertex; ++i) { sum += (container.GetVertexDegree(i) * fitnesses_[i]); } double probabilty = distributed_random_.get_probability() * sum; sum = 0; for (int i = 0; i < current_vertex; ++i) { sum += (container.GetVertexDegree(i) * fitnesses_[i]); if (probabilty <= sum) { return(i); } } return(-1); }