Betrachten Sie einen Graphen mit Knoten und E Kanten. Ohne Berücksichtigung von Termen niedriger Ordnung verwendet eine Bitmatrix für einen Graphen N 2 Bits, unabhängig von der Anzahl der Kanten.NEN2
Wie viele Bits brauchst du eigentlich?
Unter der Annahme, dass Kanten unabhängig sind, beträgt die Anzahl der Graphen mit Knoten und E Kanten ( N 2NE . Die minimale Anzahl von Bits, die erforderlich sind, um diese Teilmenge zu speichern, istlog2 ( N2(N2E) .log2(N2E)
Wir gehen ohne Einschränkung der Allgemeinheit davon aus, dass , das heißt, dass die Hälfte oder weniger der Kanten vorhanden sind. Ist dies nicht der Fall, können wir stattdessen die Menge der "Nichtkanten" speichern.E≤N22
Wenn ,log2 ( N 2E=N22log2(N2E)=N2+o(N2), so the matrix representation is asymptotically optimal. If E≪N2, using Stirling's approximation and a little arithmetic, we find:
log2(N2E)
=log2(N2)!E!(N2−E)!
=2Elog2N+O(low order terms)
If you consider that log2N is the size of an integer which can represent a node index, the optimal representation is an array of 2E node ids, that is, an array of pairs of node indexes.
Having said that, a good measure of sparsity is the entropy, which is also the number of bits per edge of the optimal representation. If p=EN2 is the probability that an edge is present, the entropy is −log2p(1−p). For p≈12, the entropy is 2 (i.e. two bits per edge in the optimal representation), and the graph is dense. If the entropy is significantly greater than 2, and in particular if it's close to the size of a pointer, the graph is sparse.