Как выполнить свертку сочетаний?

У меня есть множество уникальных сочетаний по 3 числа из различных чисел от 1 до 100. Есть ли алгоритм нахождения таких наборов рядов чисел, которые при разложении на сочетания дадут исходное множество? Пример :
Дано :
1 2 3
1 2 4
1 3 4
2 3 4
Ответ: 1 2 3 4
Нужно найти такой набор новых рядов который минимизирует кол-во записей.
  • Вопрос задан
  • 126 просмотров
Пригласить эксперта
Ответы на вопрос 3
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Странно задача сформулирована, но, кажется, надо просто найти все уникальные числа во входных данных.
Или какой-нибудь set используйте, или сложите все входные числа в массив, отсортируйте и потом удалите повторяющиеся подряд идущие элементы.
Ответ написан
Комментировать
@Maalox Автор вопроса
Нет, не уникальные числа.
Есть простая функция, которая получает строку из чисел (например 7 разных чисел в диапазоне от 1 до 100), на выходе выдаёт множество сочетаний по 3 числа - всего 35 элементов.
А мне нужна функция обратная - по множеству сочетаний (не больше 10000 элементов) определить из каких строк чисел можно получить это множество. Это что-то вроде обратимого хеширования наверное.
Пока мысли останавливаются на том чтобы посчитать количество связей между всеми числами в множестве
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1 5 17
1 5 22
1 5 23
1 17 23
5 17 23

И ответом будут 2 ряда:
1 5 17 23
1 5 22

1. Две и более одинаковых цифр в одной колонке по вертикали (1-1-1-1, 5-5-5, 17-17, 23-23-23) - помещаем в одно общее множество: 1 5 17 23.
2. Убираем все сочетания, которые содержат любые 3 цифры из общего множества.
3. Остаются только уникальные строки (1 5 22): именно уникальные сочетания. Их просто добавляем отдельно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы