Посчитать количество графов в котором хотя бы одна вершина имеет степень N - 1

Как посчитать количество неориентированных графов из N вершин , где ни у одной вершины нет степени N-1. Графы без петель и кратных ребер.

До чего пришел : Всего графов на N вершинах можно построить 2^N*(N-1)/2 Нужно из этого количества графов в которых хотя бы у одной вершины степень N-1.


Ответы (1 шт):

Автор решения: MBo

Edit исправил, т.к. первоочередное то, что в первом абзаце, а не то, что в заголовке.

Количество нужных графов из симметрии равно количеству графов, где нет ни одной изолированной вершины. А для них есть такой код.

cnk - количество сочетаний из n по k.

(1 - 2 *((n - k) & 1)) - это -1 в степени (n - k) для чередования знаков - принцип включения, исключения, видимо

(1 << (k * (k - 1) // 2) - это 2 в соотв. степени

def cnk(n, k):
    k = min(k, n - k)
    if k <= 0:
        return 1 if k == 0 else 0
    res = 1
    for i in range(k):
        res = res * (n - i) // (i + 1)
    return res

def numconn(n):
    res = 0
    for k in range(n + 1):
        res += (1 - 2 *((n - k) & 1)) * cnk(n,k) * (1 << (k * (k - 1) // 2))
    return res

for n in range(2, 10):
    print(n, numconn(n))

2 1
3 4
4 41
5 768
6 27449
7 1887284
8 252522481
9 66376424160

P.S. Поискал результаты в oeis - вот они, и формула у меня же и используется

→ Ссылка