2016-09-03 3 views
2

Как я могу эффективно проверить полный граф (т. Е. Каждый узел подключен друг к другу)? Данный граф неориентирован и не взвешен.Полная проверка графа

Я использовал BFS, чтобы проверить, но это не эффективный способ для проверки всех узлов,

1 <= number of nodes <= 10^4 

Есть ли другой подход, который поможет мне в решении этой задачи? полная (неориентированный) графа

+0

10^8 ребер, кажется, довольно большое количество, и для вычисления потребуется около одной секунды. Если вы собираетесь проверять полноту несколько раз, может быть лучший алгоритм для этого. – Bernard

ответ

1

для n числа узлов, Есть n*(n-1)/2 края. так что вы можете легко проверить для полного графа

1

А, как известно, имеют точно V(V-1)/2 края, где V является число вершин.

Итак, вы можете просто проверить, что у вас ровно V(V-1)/2 ребер.

count = 0 
for-each edge in E 
    count++ 
if (count == V(V-1)/2) 
    return true 
else 
    return false 

Почему это правильно?
Если каждая вершина соединена со всеми другими вершинами, то каждая вершина имеет ровно V-1 ребер. Это V(V-1). Так почему мы делим на 2? Это связано с тем, что в нашем подсчете каждое ребро связано с другой вершиной, поэтому мы дважды подсчитывали каждое ребро. Наконец, мы получаем V(V-1)/2 краев.

+2

количество вершин выбрать 2 –

1

Чтобы быть полным графом:

  1. Числом ребер в графе должно быть N(N-1)/2
  2. Каждого Vertice должны быть подключены к точно N-1 другим вершинам.

Время Сложность проверить второе условие: O(N^2)

использовать этот подход для второй проверки состояния:

for i in 1 to N-1 
for j in i+1 to N 
    if i is not connected to j 
    return FALSE 
return TRUE 
+0

Я не уверен, что # 2 необходимо. Если у вас есть вершины «N» и «N (N-1)/2'), то этого достаточно, чтобы быть полным графом. Я ошибаюсь? –

+0

@ A.Sarid да, это неправильно. Скажем, если только «две» вершины из вершин «N» имеют все «N * (N-1)/2' ребра, соединяющие два из них, это не означает, что они« связаны ». –

+0

Ну, это не может быть потому, что каждая вершина может иметь максимум «N-1» исходящих ребер. –

-4

для п

1<=n<=10^4 

количество узлов, Есть

= n*(n-1)/2 

края. так что вы можете легко проверить полный график

+1

Зачем вам просто копировать принятый ответ без предоставления новой информации? -1. – ChemiCalChems

Смежные вопросы