GNI — различия между версиями
(Новая страница: «=== Определение === Проблема '''GNI''' = <tex>\{\langle G_1, G_2\rangle : G_1</tex> неизоморфен <tex>G_2\}</tex> == Формулиро…») |
м (rollbackEdits.php mass rollback) |
||
(не показаны 4 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
=== Определение === | === Определение === | ||
− | Проблема '''GNI''' = <tex>\{\langle G_1, G_2\rangle : G_1</tex> неизоморфен <tex>G_2\}</tex> | + | Проблема '''GNI''' ('''Graph Non-Isomorphism''') = <tex>\{\langle G_1, G_2\rangle : G_1</tex> неизоморфен <tex>G_2\}</tex> |
== Формулировка задачи == | == Формулировка задачи == | ||
− | '''GNI''' ∈ [[ | + | '''GNI''' ∈ [[Класс_IP|'''IP''']] |
== Доказательство == | == Доказательство == | ||
Строка 13: | Строка 13: | ||
# ''Verifier'' строит новый граф <tex>F</tex>, изоморфный графу <tex>G_i</tex>, перенумеровав в нём вершины случайным образом. | # ''Verifier'' строит новый граф <tex>F</tex>, изоморфный графу <tex>G_i</tex>, перенумеровав в нём вершины случайным образом. | ||
# ''Verifier'' отдаёт граф <tex>F</tex> на проверку ''Prover'' | # ''Verifier'' отдаёт граф <tex>F</tex> на проверку ''Prover'' | ||
− | # ''Prover'' проверяет, какому из графов изоморфен граф <tex>F</tex>. Если графы <tex>G_1</tex> и <tex>G_2</tex> неизоморфны, то ''Prover'' легко определит, какому из них изоморфен граф <tex>F</tex>. В таком случае ''Prover'' возвращает <tex>j : | + | # ''Prover'' проверяет, какому из графов изоморфен граф <tex>F</tex>. Если графы <tex>G_1</tex> и <tex>G_2</tex> неизоморфны, то ''Prover'' легко определит, какому из них изоморфен граф <tex>F</tex>. В таком случае ''Prover'' возвращает <tex>j : G_j \sim F</tex>. Иначе же для ''Prover'' графы <tex>G_1, G_2, F</tex> изоморфны. Но у него нет возможности определить, с помощью какого графа ''Verifier'' построил граф <tex>F</tex>. Поэтому в этом случае ''Prover'' возвращает <tex>j = rand(2)</tex>. |
# ''Verifier'' возвращает 1, если <tex>j = i</tex>, и 0 в противном случае. | # ''Verifier'' возвращает 1, если <tex>j = i</tex>, и 0 в противном случае. | ||
− | Такой ''Verifier'' всегда выдаст единицу, если графы неизоморфны, а, если они изоморфны, выдаст единицу с вероятностью <tex>1/2</tex>. Чтобы уменьшить вероятность ошибки, надо повторить шаги 1-5 несколько раз, при этом на шаге 5 ''Verifier'' ничего не возвращает, а сохраняет получившийся результат. В конце возвращается 1, если при выполнении шагов 1-5 | + | Такой ''Verifier'' всегда выдаст единицу, если графы неизоморфны, а, если они изоморфны, выдаст единицу с вероятностью <tex>1/2</tex>. Чтобы уменьшить вероятность ошибки, надо повторить шаги 1-5 несколько раз, при этом на шаге 5 ''Verifier'' ничего не возвращает, а сохраняет получившийся результат. В конце возвращается 1, если при выполнении шагов 1-5 всегда получались единицы, и 0 в противном случае. |
Таким образом, <tex>GNI \in IP</tex> | Таким образом, <tex>GNI \in IP</tex> |
Текущая версия на 19:17, 4 сентября 2022
Определение
Проблема GNI (Graph Non-Isomorphism) =
неизоморфенФормулировка задачи
GNI ∈ IP
Доказательство
Построим вероятностную машину Verifier, которая будет проверять за полиномиальное время работы и полиномиальное число вызовов к машине Prover, действительно ли два данных графа являются неизоморфными. При этом Prover может работать столько времени, сколько ему надо.
- Verifier случайным образом выбирает число .
- Verifier строит новый граф , изоморфный графу , перенумеровав в нём вершины случайным образом.
- Verifier отдаёт граф на проверку Prover
- Prover проверяет, какому из графов изоморфен граф . Если графы и неизоморфны, то Prover легко определит, какому из них изоморфен граф . В таком случае Prover возвращает . Иначе же для Prover графы изоморфны. Но у него нет возможности определить, с помощью какого графа Verifier построил граф . Поэтому в этом случае Prover возвращает .
- Verifier возвращает 1, если , и 0 в противном случае.
Такой Verifier всегда выдаст единицу, если графы неизоморфны, а, если они изоморфны, выдаст единицу с вероятностью
. Чтобы уменьшить вероятность ошибки, надо повторить шаги 1-5 несколько раз, при этом на шаге 5 Verifier ничего не возвращает, а сохраняет получившийся результат. В конце возвращается 1, если при выполнении шагов 1-5 всегда получались единицы, и 0 в противном случае.Таким образом,