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

Алексей3

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

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

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

Вот, собственно и вопрос, какой алгоритм решения этой задачи?
 

hell0w0rd

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

Алексей3

Новичок
Пришла при работе над проектом.
Нужно отобрать данные, которые между собой связаны.
 

hell0w0rd

Продвинутый новичок
хм.. мы же тут не математическую задачку решаем, в таком случае. Можно хоть сколько-то приблизить к реальности задачу?
 

Алексей3

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

keltanas

marty cats
Ну реши перебором, с отходом назад. Но, если текстов много, можно посадить печень.
 

hell0w0rd

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

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

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