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''' ∈ [[IP|'''IP''']]
+
'''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 : G_i \sim F</tex>. Иначе же для ''Prover'' графы <tex>G_1, G_2, F</tex> изоморфны. Но у него нет возможности определить, с помощью какого графа ''Verifier'' построил граф <tex>F</tex>. Поэтому в этом случае ''Prover'' возвращает <tex>j = rand(2)</tex>.
+
# ''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 единиц получилось больше, и 0 в противном случае.
+
Такой ''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) = [math]\{\langle G_1, G_2\rangle : G_1[/math] неизоморфен [math]G_2\}[/math]

Формулировка задачи

GNIIP

Доказательство

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

  1. Verifier случайным образом выбирает число [math]i = rand(2)[/math].
  2. Verifier строит новый граф [math]F[/math], изоморфный графу [math]G_i[/math], перенумеровав в нём вершины случайным образом.
  3. Verifier отдаёт граф [math]F[/math] на проверку Prover
  4. Prover проверяет, какому из графов изоморфен граф [math]F[/math]. Если графы [math]G_1[/math] и [math]G_2[/math] неизоморфны, то Prover легко определит, какому из них изоморфен граф [math]F[/math]. В таком случае Prover возвращает [math]j : G_j \sim F[/math]. Иначе же для Prover графы [math]G_1, G_2, F[/math] изоморфны. Но у него нет возможности определить, с помощью какого графа Verifier построил граф [math]F[/math]. Поэтому в этом случае Prover возвращает [math]j = rand(2)[/math].
  5. Verifier возвращает 1, если [math]j = i[/math], и 0 в противном случае.

Такой Verifier всегда выдаст единицу, если графы неизоморфны, а, если они изоморфны, выдаст единицу с вероятностью [math]1/2[/math]. Чтобы уменьшить вероятность ошибки, надо повторить шаги 1-5 несколько раз, при этом на шаге 5 Verifier ничего не возвращает, а сохраняет получившийся результат. В конце возвращается 1, если при выполнении шагов 1-5 всегда получались единицы, и 0 в противном случае.

Таким образом, [math]GNI \in IP[/math]