|
|
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
Коллеги доброй ночи! В продолжение темы 18943562 . Меня заинтересовал вопрос принципиального решения задачи изоморфизма на 600 ядрах. Но для начала его неплохо-бы решить на 2х или 4х ядрах основного CPU. Краткий ликбез. Напомню суть. Граф это такая штука в которой есть вершины (V), vertices, и ребра (E), edges. Вершины - сами по себе. А рёбра их связывают. (Ребра бывают ориентированные (стрелочка) которые смотрят в одну сторону но мы такие трогать не будем. Нас будут интересовать только неориентированные). Пример: У графов есть характеристики мощностей вершин. Есть остов . Клика и многое другое. Есть формулы, связывающие предельные объемы вершин и ребер. Есть понятие смежность когда одна вершина смежна к другой. И инцедентность - это связь вершина - со списком ребер. Считается что граф обобщает достижения дискретной математики и позволяет решать (почти) любые задачки связанные с топологиями. Задачки коммивояжера. Поиск путей в лабиринтах. Разрезы. Потоки. Кратчайшие пути. Системотехника. Медицина. Раскрска гео-карты, моделирование сети TCP/IP и многое и многое другое полезное для народного хозяйства. Деревья и связные списки также - суть частные случаи графов. Один граф изоморфен по отношению к другому если их можно наложить один на другой с сохранением топологии (вершина к вершие, ребро к ребру) без учёта нумераций или меток вершин и ребер. На этом пожалуй все. Я слил то что знал и помнил из курса дискретки. Остальное читайте в вики. Дано. Два неориентированных графа в следующем виде (матрица смежностей). Первый из них - соответствует картинке. Input: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Необходимо установить, являются ли они изоморфными. Output: Код: sql 1. Несмотря ка кажущуюся простоту - задачка имеет фейерический оверхед по вычислениям. Про асимпт. сложность я пока не буду говорить. Это вопрос неоднозначный. Лучше читайте сами. Наш старый знакомый Рэт , этот экзальтированный гений решал ее довольно долго и вроде добился успехов. В летописях ПТ об этом сохранились сведения Ограничения. В данном топике нас с вами не интересует копи-паста готового решения. Нас интересует проверка принципиальной возможности ускорить расчёт изоморфизма в 600 раз используя железо (CPU/GPU) Будут или не будут блокировки. Можно или не можно сделать shared nothing e.t.c. Нужно или нет диспетчеризировать процессы. Приветствуется: С/C++/Assembler/Rust/D Особый респект поцанам которые осилят: CUDA, OpenNP или построят вычислительную сетку из 600 рабочих станций Не ждите от меня моего решения. У меня его на данный момент к сожалению нет. Слуга ваш покорный mayton Go!Go! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 02:51 |
|
||
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
Граф это матрица - нужно всего лишь перебрать все перестановки строчек и столбцов в ней. Вычислительная сложность - n!^2. Поскольку основная матрица только для чтения - параллелится легко. Каждая перестановка в отдельном потоке генерится своим потоком в свою матрицу. Все. Задача имеет решение, дальше неинтересно =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 10:30 |
|
||
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
Ну и способ сократить количество перестановок - нам же известно количество связей каждой точки. Соответственно, перебирать надо точки с одинаковым числом связей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 12:53 |
|
||
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
SiemarglПоскольку основная матрица только для чтения - параллелится легко. Каждая перестановка в отдельном потоке генерится своим потоком в свою матрицу. Давай я внесу еще одну поправку. Граф будет не с 8 вершинами как я нарисовал а с большим количеством. И непонятно также с какой перестановки начнёт каждый поток. И непонятно какое явление или процесс ему эту перестановку выдаст так чтобы была уникальность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 13:11 |
|
||
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
mayton, Ну факториальные алгоритмы очень легко параллелить. Пусть n-й проц занимается перестановками, в который n-й элемент на 1м месте. Это - идея, а дальше разбивайте сами ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 13:20 |
|
||
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
Siemarglmayton, Ну факториальные алгоритмы очень легко параллелить. Пусть n-й проц занимается перестановками, в который n-й элемент на 1м месте. Это - идея, а дальше разбивайте сами ) Не... Зяма. Стоп. Ты набижал. Вбросил дескыть тут нефиг делать. А я вот не понимаю кто (какой процесс) будет генерить или диспетчеризировать работы для наших процессов workers и как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 13:35 |
|
||
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
Кто-то сомневается, что задача NP-полная? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 13:51 |
|
||
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
mayton, Так тут действительно нефиг делать. На старте поделил на куски - и стартовал 600 процессов. Если какой либо процесс выставил 1 в глобальном флаге найден_изоморфизм - все, приехали. Никакой конкуренции, никакой диспетчеризации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 13:51 |
|
||
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
ИзопропилКто-то сомневается, что задача NP-полная? у этой задачи могут быть весьма частные и сильно отличные по эффективности случаи. матрица, например, может иметь какие-то внутренние симметрии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 17:15 |
|
||
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
SiemarglНу и способ сократить количество перестановок - нам же известно количество связей каждой точки. Соответственно, перебирать надо точки с одинаковым числом связей. Отлично давайте перебирать точки с одинаковым числом связей. Для графа с N вершинами мы не будем использовать permutations всех вершин т.к. уже для 21 вершины (21 факториал) мы получаем число перестановок больше чем максимальное целое для int64. Скорее всего нам придется заведомо отбрасывать ветви поиска которые не совпадают. И сразу переходить к поискам. Грубо говоря. 1. Если количество вершин (N1) графа G1 не равно количеству вершин N2 то ответ - не изоморфны. 2. Если мощности вершин G1 не совпадают с G2 (их надо отсортировать для сравнения) то - не изоморфны. 3. Самое интересное. Гистограммы мощностей вершин совпали. Надо доказать изоморфизм, переставляя вершины в группах. (Это возможно грубо и тоже похоже на брутфорс). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 23:39 |
|
||
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
Марк, ну я тут-же вспомнил Кнута, где в одном из упражнений он предлагает доказать теорему Ферма, ни слова не говоря о том что это и есть та самая теорема. При это сложность задачи ставит равно 45, а не максимально возможную 50. Задача ваша, если не ошибаюсь, принадлежит NP полному классу задач. Тут бы алгоритм приличный найти, а уже потом об оптимизации думать. А вы тут так интересно пишите maytonПро асимпт. сложность я пока не буду говорить. Это вопрос неоднозначный. Лучше читайте сами. Конечно не будете :D Ну вы весельчак :D А вообще, 600 ядер, в общем случае и как всем известно, не даст ускорение в 600 раз (не помню как выглядит формула расчёта скорости, но там точно не линейная зависимость, даже если все функции входящие в состав программы реентерабельны). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 01:59 |
|
||
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
В смежном топике Кудрявцев пишет Да где там рекурсия? IMHO Большинство задач сводится к многократному поиску кратчайшего пути. Зачем вешать блокировки на вершинах и ребрах - мне вообще не понятно. Если граф в процессе расчета не меняет свою топологию, отдельные "ветки" можно запускать на каком угодно кол-ве процессоров . Я сходу согласился. Но не представляю себе каким образом мы будем вычислять "те самые отдельные ветки". Причем не просто вычислять а вычислять эффективно. Мне это непонятно. А по поводу алгоритма.... ну это имеет значение, но мне нужна была симуляция нагрузки. А если кто готов принять математический challenge - то welcome. Я не буду возражать против параллельных копаний в дискретную математику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 02:41 |
|
||
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
математический challenge это хорошо, но дело в том что некоторые учёные бьются над данной проблемой 10 лет. Если нам интересно проверить утверждение Кудрявцева ( а кто это такой кстати ?), то вероятно лучше использовать другие алгоритмы на графах, асимптотика которых заранее известна. Не так давно читал про формирование некой непрерывной последовательности всех возможных комбинаций алгоритма, при это постфикс текущего элемента последовательности, является префиксом следующего. Вроде бы асимптотика построения такого графа известна, но не могу вспомнить как называется алгоритм. Может быть кто-нибудь подскажет, или предложит другой алгоритм для тестирования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2016, 01:50 |
|
||
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
не комбинаций алгоритма, а правильно будет "всех возможных перестановок алфавита" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2016, 01:51 |
|
||
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
Ты имеешь в виде Генератор перестановок ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2016, 02:34 |
|
||
|
Тяпничный изоморфизм на 600 ядрах
|
|||
|---|---|---|---|
|
#18+
Не просто генератор перестановок, и их формирование в таком порядке, чтобы постфикс текущего, был префиксом следующего. Это используется, например, для ускорения полного перебора в том случае когда начало ввода ключа не фиксируется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2016, 03:22 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=30&tid=1340766]: |
0ms |
get settings: |
4ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
31ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 297ms |

| 0 / 0 |
