Пути в полном графе

У меня есть друг, которому нужно вычислить следующее:

В полном графе Kn (k‹=13) имеется k*(k-1)/2 ребер. Каждое ребро может быть направлено двумя способами, следовательно, 2^[(k*(k-1))/2] разных случаев.

Ей нужно вычислить P[A !-> B && C !-> D] - P[A !-> B]*P[C !-> D]

X !-> Y означает «нет пути из X в Y», а P[ ] — вероятность.

Таким образом, алгоритм грубой силы заключается в проверке каждого из 2^[(k*(k-1))/2] различных графов, и, поскольку они полны, в каждом графе нужно рассматривать только один набор A, B, C,D из-за симметрии.

Затем P[A !-> B] вычисляется как «количество графов без пути между узлами 1 и 2», деленное на общее количество графов, т.е. 2^[(k*(k-1))/2].

Метод перебора работает в математике до К8, а ей нужны К9,К10... до К13.

Нам, очевидно, не нужно искать кратчайший путь в кейсах, мы просто хотим найти, есть ли он.

У кого есть предложения по оптимизации? (Звучит как типичная проблема Project Euler).

Пример:

Минимальный граф K4 имеет 4 вершины, дающие 6 ребер. Следовательно, есть 2 ^ 6 = 64 возможных способа назначить направления ребрам, если мы пометим 4 вершины A, B, C и D.

В некоторых графах НЕТ пути из A в B (скажем, X из них), а в некоторых других нет пути из C в D (скажем, Y). Но в некоторых графах нет пути из A в B, и в то же время нет пути из C в D. Это W.

Итак, P[A !-> B]=X/64, P[C !-> D]=Y/64 и P[A !-> B && C !-> D] = W/64.

Обновление:

  • A, B, C и D — 4 разных вертива, поэтому нам нужно как минимум K4.
  • Обратите внимание, что мы имеем дело с НАПРАВЛЕННЫМИ графами, поэтому обычного представления с помощью UT-матриц недостаточно.
  • В математике есть функция, которая находит расстояние между узлами в ориентированном графе (если она возвращает бесконечность, пути нет), но это немного излишне, так как нам не нужно расстояние, просто если есть путь или нет.

person Per Alexandersson    schedule 24.08.2009    source источник
comment
Не могли бы вы добавить небольшой пример, чтобы сделать проблему более ясной?   -  person Pratik Deoghare    schedule 24.08.2009
comment
Могут ли A, B, C, D быть равными?   -  person Craig Gidney    schedule 24.08.2009


Ответы (3)


У меня есть теория, но нет математики, чтобы проверить ее, так что поехали. (И, пожалуйста, извините за мои ошибки в терминологии, я не совсем знаком с теорией графов.)

Я согласен, что существует 2^(n*(n-1)/2) различных ориентированных графов Kn. Вопрос в том, сколько из них содержат путь A->B. Назовите этот номер S(n).

Предположим, мы знаем S(n) для некоторого n и хотим добавить еще один узел X и вычислить S(n+1). Будем искать пути X->A.

Есть 2 ^ n способов соединить X с ранее существовавшим графом.

Ребро X-A может указывать в «правильном» направлении (X->A); существует 2 ^ (n-1) способов соединить X таким образом, и это приведет к пути для любого из 2 ^ (n * (n-1)/2) различных графов Kn.

Если X-A указывает на X, попробуйте ребро X-B. Если X-B указывает на B (а таких способов соединить X 2^(n-2)), то некоторые графы Kn дадут путь B->A, их фактически S(n).

Если X-B указывает на X, попробуйте X-C; там 2^(n-3)S(n) успешных графов.

Если моя математика верна, S(n+1) = 2^((n+2)(n-1)/2) + (2^(n-1)-1)S(n)

Итак, это дает следующее:

S(2) = 1
S(3) = 5
S(4) = 47
S(5) = 841
S(6) = 28999

Кто-нибудь может это проверить? Или дать закрытую форму для S(n)?

РЕДАКТИРОВАНИЕ:
Теперь я вижу, что сложная часть — это P[A !-> B && C !-> D]. Но я думаю, что рекурсивный подход все равно будет работать: начните с {A,B,C,D}, затем продолжайте добавлять точки, отслеживая количество графиков, в которых A->(a точки), (b точки)-> B, C->(c точек) и (d точек)->D, сохраняя желаемое ограничение. Некрасиво, но сговорчиво.

person Beta    schedule 24.08.2009
comment
Да, рекурсия выглядит действительно уродливо, но доказательство для K14 и более, я считаю, не самое красивое. Сложность 2 ^ (n ^ 2) - это PITA... - person Per Alexandersson; 25.08.2009

Подход грубой силы с рассмотрением всех графиков не продвинет вас дальше, вам придется рассматривать более одного графика за раз.

Для 8 у вас есть 2 ^ 28 ~ 256 миллионов графиков.

9: 2^36 ~ 64 миллиарда

10: 2^45 ~ 32 триллиона

11: 2^55 > 1016

12: 2^66 > 1019

13: 2^78 > 1023

С целью поиска путей интересной частью является частичное упорядочение сильно связанных компонентов графа. На самом деле порядок должен быть тотальным, потому что между любыми двумя узлами есть ребро.

Таким образом, вы можете попытаться рассмотреть общие заказы, их, безусловно, намного меньше, чем графиков.

person starblue    schedule 24.08.2009

Я думаю, что представление графика с использованием матрицы будет очень полезным.

Если A!->B, поместите 0 в строку A и столбец B.

Ставьте 1 везде.

Количество нулей = Z.

затем P[A!->B] = 1 / 2^Z

=> P[A!->B && C!->B] - P[A!-B].P[C!-D] = 1/2^2 - 1/ 2^(X-2) // Что-то тут не так, исправлю where X = k(k-1)/2

  A B C D
A . 0 1 1
B . . 1 1
C . . . 1
D . . . .

ПРИМЕЧАНИЕ. Мы можем использовать верхний треугольник без потери общности.

person Pratik Deoghare    schedule 24.08.2009
comment
Итак, для k = 4 P = 15/64? Я не думаю, что это правильно. По моим расчетам на бумаге и карандаше, P = 95/4096. - person Beta; 24.08.2009
comment
@Beta: для k = 4 имеется 6 ребер, а 2 ** 6 = 64 различных ориентации ребер. - person tonfa; 24.08.2009
comment
@tonfa, да, а что такое P[A!-›B]? Что такое P[A!->B && C!->D]? - person Beta; 25.08.2009