Существует ли эффективный алгоритм для поиска «максимального связанного множества»?

#algorithm #pseudocode

#алгоритм #псевдокод

Вопрос:

Учитывая 2D-таблицу логических значений, описывающих соединения между парами узлов, существует ли эффективный способ найти наибольшее подмножество узлов, в котором все узлы подключены ко всем узлам?

Пример с 6 узлами:

введите описание изображения здесь

В этом случае «максимальное связное множество» равно {node1, node4, node5}. Хотя node0 подключен к node2 и node3, node2 и node3 не подключены, поэтому не образуют «связный набор».

Это небольшой пример, но меня интересует общий алгоритм, который в принципе может быть применен к очень большим таблицам.

В случае, если это поможет, моя цель — воспроизвести значения mn из таблицы I этой статьи: Сарвейт, Д.В. и М.Б. Персли, «Свойства взаимной корреляции псевдослучайных и связанных последовательностей», Proc. IEEE, том 68, № 5, май 1980 г., стр. 583-619.

Я буду кодировать это в MATLAB, но также довольно свободно владею C / C .

РЕДАКТИРОВАТЬ: вот таблица, из которой я хочу воспроизвести результаты: введите описание изображения здесь

  • 1-й и 2-й столбцы здесь не очень важны (просто опишите длины кодов).
  • 3-й столбец — это то, что я назвал количеством «узлов».
  • 4-й столбец является мерой ошибки, если вы используете все узлы (независимо от того, «подключены» они или нет).
  • 6-й столбец является (минимальной) ошибкой, если используется только «максимальный связанный набор».
  • 5-й столбец, mn описывает количество узлов в максимальном связном множестве.

Ответ №1:

Ваша проблема эквивалентна — фактически, ее можно даже рассматривать как повторное изложение — проблема максимальной клики в теории графов. Теория графов имеет дело именно с теми структурами, о которых вы говорите: узлы, соединенные вместе, которые называются графами, и один из способов их представления — это то, что у вас есть выше, которое называется матрицей смежности.

«Максимальная клика» — это именно то, что вы описали: наибольшее подмножество узлов графа, которые таковы, что каждый узел связан со всеми другими.

Эта проблема является «NP-полной», что в основном представляет собой целый класс проблем, которые, как широко предполагается, но не доказано, не разрешимы «эффективно»: в частности, это означает, что в отношении самых сильных предположений, сделанных в этом ключе, которые имеют аргументы правдоподобия, эти проблемы, как минимум, экспоненциально отнимает много времени. То есть, по сути, вы не можете добиться большего, чем просто исчерпывающий поиск по всему вашему графу, по крайней мере, в общем случае. Тем не менее, для такой маленькой таблицы исчерпывающий поиск всех узлов и соединений по-прежнему выполняется практически мгновенно даже для домашнего компьютера, но в более чем относительно небольших масштабах станет невозможным даже для суперкомпьютера.

Комментарии:

1. Спасибо за ваш очень быстрый ответ. Я прочитаю о «максимальных кликах». Я обновил свой вопрос, чтобы уточнить, что на практике меня интересуют таблицы большего размера.

2. @Harry : Спасибо. Насколько больше вы думаете? Тем не менее, учитывая, что вы сослались на статью с уже вычисленными значениями, это говорит о том, что, учитывая, что они смогли их вычислить, возможно, вы либо рассматриваете неправильную проблему, либо существуют дополнительные ограничения на проблемную область, которые затем сделали бы ее эффективной, при условии, что их набор данных был «большой» в вашем смысле.

3. Статья написана в 1980 году, поэтому вычислительная мощность, безусловно, не должна быть препятствием для воспроизведения их результатов (хотя мое непонимание может быть). В их таблице I перечислены только несколько результатов, и мне было бы интересно сгенерировать еще несколько (только из интереса). Их последний результат имеет 2048 узлов, но я не думаю, что в теории существует верхняя граница.

4. @Harry: Да, я не могу сейчас проверить документ, поэтому я подозреваю, что они делают что-то отличное от того, что вы могли бы подумать. Можете ли вы опубликовать выдержку только из таблицы? Или даже только то, что он должен составлять таблицу, например, заголовок / заголовок таблицы? Что такое M_n?

5. @The_Symphathizer: я добавил таблицу в конце своего вопроса. Я не уверен, скажет ли это вам то, что вам нужно знать. Еще раз спасибо за вашу помощь.