Перерахуйте всі неізоморфні графіки певного розміру


30

Я хотів би перерахувати всі непрямі графіки розміром , але мені потрібен лише один примірник кожного класу ізоморфізму . Іншими словами, я хочу перерахувати всі неізоморфні (непрямі) графіки на n вершинах. Як я можу це зробити?nn

Точніше, я хочу алгоритм, який генерує послідовність непрямих графіків із таким властивістю: для кожного непрямого графа G на n вершинах існує індекс i такий, що G ізоморфний до Г i . Я хотів би, щоб алгоритм був максимально ефективним; Іншими словами, метрика, яку я хвилюю, - це час роботи для створення та повторення через цей список графіків. Вторинна мета - це було б непогано, якби алгоритм був не надто складним для реалізації.G1,G2,,GkGniGGi

Зауважте, що мені потрібно мати принаймні один графік з кожного класу ізоморфізму, але це нормально, якщо алгоритм створює більше одного екземпляра. Зокрема, це нормально, якщо вихідна послідовність включає два ізоморфних графіки, якщо це допомагає полегшити пошук такого алгоритму або дозволяє більш ефективні алгоритми, якщо вони охоплюють усі можливі графіки.

Моя заявка така: У мене є програма, яку я хочу перевірити на всіх графіках розміру . Я знаю, що якщо два графіки є ізоморфними, моя програма буде поводитись однаково на обох (вона буде або правильною для обох, або неправильною для обох), тому достатньо перерахувати хоча б одного представника з кожного класу ізоморфізму, а потім перевірити тест програма на цих входах. У моєму застосуванні п досить невеликий.нn

Я розглянув кілька алгоритмів-кандидатів:

  • Я міг би перерахувати всі можливі матриці суміжності, тобто всі симетричні 0-або-1 матриць, які мають всі 0 на діагоналях. Однак для цього потрібно перерахувати 2 n ( n - 1 ) / 2 матриць. Багато з цих матриць представлятимуть ізоморфні графіки, тому, здається, це витрачає багато зусиль.n×n2n(n1)/2

  • Я міг би перерахувати всі можливі матриці суміжності, і для кожної перевірити, чи це ізоморфна будь-якому з графіків, які я раніше вивів; якщо воно не є ізоморфним до чогось раніше, виведіть його. Це значно скоротить список вихідних даних, але він все одно потребує принаймні етапи обчислення (навіть якщо вважати, що перевірка ізоморфізму графіка є надшвидкою), тому за моєю метрикою це не набагато краще.2n(n1)/2

  • Можна перерахувати підмножину матриць суміжності. Зокрема, якщо - графік на n вершинах V = { v 1 , , v n } , без втрати загальності я можу припустити, що вершини розташовані так, що deg v 1deg v 2deg v nGnV={v1,,vn}degv1degv2degvn. Іншими словами, кожен графік ізоморфний такому, де вершини розташовані в порядку зменшення ступеня. Отже, досить перерахувати лише матриці суміжності, які мають цю властивість. Я точно не знаю, скільки таких матриць суміжності є, але це набагато менше , і їх можна перерахувати набагато менше 2 n ( n - 1 ) / 2 кроків обчислення. Однак це все ще залишає багато надмірності: багато класів ізоморфізму все ще будуть охоплені багато разів, тому я сумніваюся, що це оптимально.2n(n1)/22n(n1)/2

Чи можемо ми зробити краще? Якщо я правильно розумію, є приблизно класи еквівалентності неізоморфних графіків. Чи можемо ми знайти алгоритм, час роботи якого кращий за вищезазначені? Як близько ми можемо дістатися до ~ 2 п ( п - 1 ) / 2 / п ! нижня межа? Я переймаюся передусім тяговістю для малих n (скажімо, n = 5 або n = 82n(n1)/2/n!2n(n1)/2/n!nn=5n=8або так; достатньо малий, щоб можна було правдоподібно запустити такий алгоритм до завершення), не стільки про асимптотику для великих .n

Пов’язано: Побудова нееквівалентних двійкових матриць (хоча, на жаль, на одну, здається, не отримали дійсної відповіді).


1
Афаїк, навіть кількість графіків розміром аж до ізоморфізму невідома, тому я думаю, що навряд чи існує алгоритм (без грубої сили). Що стосується алгоритмів вашого кандидата, майте на увазі, що ми не знаємо алгоритм поліноміального часу для перевірки ізоморфізму графіка (afaik), тому будь-який алгоритм, який повинен працювати в O ( | висновок | ), повинен уникати необхідності перевірки ізоморфізму ( часто / тупо). (Також | | вихід | = Ω ( n | класи | ) .)nO(|output|)|output|=Ω(n|classes|)
Рафаель

@Raphael, (1) Я знаю, що ми не знаємо точної кількості графіків розміром аж до ізоморфізму, але ця проблема не обов'язково вимагає цього знати (наприклад, через те, що я в порядку з повторами). Я не знаю, чому це означає, що навряд чи є кращий алгоритм, ніж той, який я дав. (2) Так, я знаю, що не існує відомого алгоритму поліноміального часу для ізоморфізму графіка, але ми будемо говорити про значення n як n = 6 , тому існуючі алгоритми, ймовірно, будуть швидкими - і в будь-якому випадку, я лише згадав алгоритм цього кандидата, щоб його відхилити, так що це все одно спірне. nnn=6
DW

Щонайбільше для я вважаю, що після вибору кількості вершин і кількості ребер та впорядкованих міток вершин не зменшуючись на ступінь, як ви пропонуєте, тоді можливих класів ізоморфізму буде дуже мало. У цей момент може стати можливим сортування решти випадків шляхом перевірки ізоморфізму грубої сили, використовуючи, наприклад, NAUTY або BLISS. n
Саймон

Відповіді:


19

Напевно, найпростіший спосіб перерахувати всі неізоморфні графіки для малих вершин - це завантажити їх із колекції Брендана Маккея . Алгоритм перерахування описаний у статті Маккея [1] і працює, розширюючи неізоморфи розміром n-1 усіма можливими способами та перевіряючи, чи була нова вершина канонічною. Він реалізований, як gengу графіку Маккея на ізоморфізм nauty.

[1]: Б.Д. Маккей, Застосування методики перерахування маркованих даних , Конгрес Нумеранцій, 40 (1983) 207-221.


У мене є проблема. Я беру графік розміру n-1і розширюю його вершиною усіма можливими способами, як ви сказали. Потім я перевіряю, чи має вершина канонічну мітку, скажімо 1(канонічна вершина ?!). Однак що робити, якщо графік є лише ізоморфним для канонічної форми, а вершина має іншу мітку? Я спробував перевірити автоморфізми, щоб побачити, чи вершина з міткою 1знаходиться на одній орбіті, але потім я в кінці списку двічі опиняюсь у своєму списку. Папір мені не дуже допомагає. Крім того, вихідний код geng є нечитабельним через усі ці бінарні оптимізації та ледь будь-які коментарі.
Олексій

1
@Alex Ви обов'язково хочете, щоб версія перевірки визначала, чи нова вершина знаходиться на тій же орбіті, що і 1. Чи можете ви навести приклад, коли це дає два ізоморфні графіки? Можливо, це було б краще як нове запитання.
Девід Ейзенстат

Гаразд, велике спасибі! Я припускаю, що в такому випадку "розширенням усіма можливими способами" потрібно якось розглянути автоморфізми графа з n-1вершинами? наприклад, n = 3, і мій попередній графік був P2. Тоді два випадки, коли я приєдную третю вершину до однієї з попередніх вершин, звичайно, призведе до того ж графа P3. Чи можете ви швидко пояснити, як правильно "розширити усіма можливими способами" чи мені слід поставити це як інше питання? (Крім того, іноді мене плутають з приводу того, що трапляється, оскільки в моїй програмі потрібно знайти неізоморфізми спеціального типу графіка, що робить речі дещо складнішими)
Alex

@ Алекс Так, схоже, що саме розширення має бути канонічним. Напевно, варто нове запитання, оскільки я не пам’ятаю, як це працює у верхній частині моєї голови.
Девід Ейзенстат

1
Домашня сторінка Nauty
Гай Кодер

4

Я пропоную вдосконалення щодо вашої третьої ідеї: Заповніть матрицю суміжності рядок за рядком, відстежуючи вершини, еквівалентні за ступенем та примиканням до раніше заповнених вершин. Тож спочатку класи еквівалентності будуть складатися з усіх вузлів з однаковим ступенем.
Коли щойно заповнена вершина прилягає лише до деяких еквівалентних вузлів, будь-який вибір призводить до представників з тих же класів ізомфізму. Тож ми розглянемо лише призначення, де заповнена в даний час вершина примикає до еквівалентних вершин з найбільшою кількістю (і розділить клас еквівалентності на два для решти процесу).

n<6
(1,2)(3,4)n=6

Наївна реалізація цього алгоритму зіткнеться з тупиками, де виявиться, що матриця суміжності не може бути заповнена відповідно до заданого набору ступенів та попередніх призначень. Виявити / фільтрувати їх можливо рано. Деякі ідеї:

  • Якщо сума градусів непарна, вони ніколи не утворюють графік
  • Заповніть записи для вершин, які потрібно негайно підключити до всіх / жодної вершини, що залишилася.

3

Ці папери можуть зацікавити.

"Про коротке подання графіків", Дьорджі Туран, Дискретна прикладна математика, Том 8, Випуск 3, липень 1984, с. 289-294 http://www.sciencedirect.com/science/article/pii/0166218X84901264

"Коротке представлення загальних маркованих графіків", Моні Наор, Дискретна прикладна математика, Том 28, Випуск 3, вересень 1990, стор. 303-307 http://www.sciencedirect.com/science/article/pii/0166218X9090011Z

Вони представляють функції кодування та декодування для кодування графа, позначеного вершиною, так що два таких графіки відображаються на одне і те саме кодове слово, якщо і лише в тому випадку, якщо один є результатом перестановки міток вершин іншого.

Крім того, доведено, що функції кодування та декодування є ефективними.

У першому документі розглядаються плоскі графіки. У другому документі знято обмеження планарності.

EDIT: Цей документ також може бути актуальним:

Графічний ізоморфізм у квазіполіномійному часі, Ласло Бабай, Чиказький університет, передрук на arXiv, 9 грудня 2015 р. Http://arxiv.org/pdf/1512.03547v1.pdf

Оголошення Бабея про його результат зробило новину: https://www.sciencenews.org/article/new-algorithm-cracks-graph-problem

Але, можливо, я помиляюсь, якщо зв’язувати питання ОП з цими трьома документами? ОП бажає перерахувати неізоморфні графіки, але все ж може бути корисним використання ефективних методів визначення, коли два графіки є ізоморфними?


Я ціную цю думку, але боюся, що не запитую, як визначити, чи є два графіки ізоморфними. Я справді запитую, як перерахувати неізоморфні графіки. Опис алгоритмів тестування того, чи є два графіки ізоморфними, мені не дуже допомагає, боюся - все ж спасибі за спробу!
DW

Туран і Наор (в роботах, про які я згадую вище) будують функції типу, який ви описуєте, тобто які відображають графік у канонічний представник класу еквівалентності, до якого належить цей графік. Якщо ви могли б перерахувати цих канонічних представників, то, здається, це вирішило б вашу проблему.
Саймон


1

Є стаття з початку дев'яностих, яка займається саме цим питанням:

Ефективні алгоритми для переліку графіків без маркування Леслі Голдберг.

Підхід гарантує, що перераховується рівно один представник кожного класу ізоморфізму та що між генеруванням двох наступних графіків існує лише поліноміальна затримка.

n

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.