Це не особливо розумний алгоритм, але це многочлен, і я думаю, він повинен працювати. Візьміть будь-який набір. Для кожного елемента цього набору підраховуйте кількість решти наборів, які не містять його, і пам’ятайте, які набори містять його. Виберіть елемент з найбільшою кількістю та повторіть підрахунок для решти елементів, ігноруючи набори, у яких не вистачає вибраного вами елемента. Продовжуйте, поки всі інші набори не будуть усунені з розгляду.
Приклад: нехай , , і . Тоді маємо відліки , і . Вибираємо 1, виключаючи множини і які не містили його; повторюючи підрахунки, маємо і . Ми вибираємо 2 як наступний елемент і видаляємо з розгляду. Зараз ми закінчили, і наш набір «відбитків» - . EDIT: для завершення прикладу, ви повинні отримати інші набори відбитків пальців як ,A={1,2,3}B={2,3,4}C={2,4,6}D={1,3,5}c1=2c2=1c3=1BCc2=1c3=0D{ 3 , 4 } { 6 } { 5 }{1,2}{3,4}{6} і .{5}
Я не задумувався над цим багато, але інтуїтивно, схоже, це має спрацювати. Ідея полягає в тому, щоб жадібно взяти в якості наступного елемента набір відбитків елемент, який охоплює найбільш непокриті набори.