CalculateGraphDensity
(
IGraph oGraph,
Int32 iVertices,
Int32 iTotalEdgesAfterMergingDuplicatesNoSelfLoops
)
{
Debug.Assert(oGraph != null);
Debug.Assert(iVertices >= 0);
Debug.Assert(iTotalEdgesAfterMergingDuplicatesNoSelfLoops >= 0);
Nullable<Double> dGraphDensity = null;
if (iVertices > 1)
{
Double dVertices = (Double)iVertices;
dGraphDensity =
(2 * (Double)iTotalEdgesAfterMergingDuplicatesNoSelfLoops) /
(dVertices * (dVertices - 1));
if (oGraph.Directedness == GraphDirectedness.Directed)
{
dGraphDensity /= 2.0;
}
// Don't allow rounding errors to create a very small negative
// number.
dGraphDensity = Math.Max(0, dGraphDensity.Value);
}
return (dGraphDensity);
}