Группировка пар

Алексей3

Новичок
Всем добра!

Есть пары, пусть, например: (А, Б) (А, В) (А, Г) (В, Г) (А, Д) (Д, В)
Нужно элементы из этих пар сгруппировать в одну или несколько групп так, чтобы взяв из любой группы пару любых элементов, они нашлись в одной исходной паре. Порядок элементов в парах и группах значения не имеет.

То есть в итоге должно получиться: (А, В, Г) (А, В, Д) (А, Б)
То есть если из первой группы (А, В, Г) взять, например В и Г, то пара (В, Г) была в исходных. (А, Г) тоже есть, и (А, В) есть в исходных.

Вот, собственно и вопрос, какой алгоритм решения этой задачи?
 
Надо гуглить на тему пересечения множеств... Думаю хороший алгоритм будет это решать как-то через графы.
А это вы где такую задачку взяли?
 
Пришла при работе над проектом.
Нужно отобрать данные, которые между собой связаны.
 
хм.. мы же тут не математическую задачку решаем, в таком случае. Можно хоть сколько-то приблизить к реальности задачу?
 
Да, на самом деле это и есть реальность, чистая математика. Пришли тексты, у каждого свой номер и номера текстов на него похожих. Нужно сгруппировать, собрав вместе документы, которые похожи каждый на каждого.
 
Ну реши перебором, с отходом назад. Но, если текстов много, можно посадить печень.
 
Есть такая штука - графовые базы данных. Возможно это тот случай.
 
Наверное, уже не очень актуально, но все-таки отвечу.

В общем виде задача решается так: http://ru.wikipedia.org/wiki/Алгоритм_Брона_—_Кербоша

Ну и очевидное замечание: если задача стоит как "найти все статьи похожие на статью X", то не нужно перефигачивать все 4000 статей, а достаточно выдернуть из БД (делается это 1-2 запросами):
а) пары, в которые входит текущая статья;
б) пары, образованные элементами из пар, найденных в пункте "а".
И искать группы только среди найденного.
 
Сверху