Набор ударов и обложка набора

Формально пусть H = (V, E) — гиперграф с множеством вершин V, множеством гиперребер E и некоторым количеством подмножеств Ci ⊆ V; i=1..n, то множество S ⊆ V называется множеством попаданий, если для всех Ci имеем Ci ∩ S = ∅. И мы называем это S a (минимальный набор попаданий), если он был наименьшим, насколько это возможно, то есть имел наименьший возможный размер |S| (количество узлов).

Алгоритм

Невзвешенный алгоритм

Un-weighted MHS (U all nodes, S all subsets)
NHS <- Collection of sets that haven’t been hit yet (equals S)
Sol <- Collection of nodes chosen as a solution
while NHS not empty Then
  x <- choose node from {U/Sol} that hits maximum count of s ∈ NHS
  add x to Sol
  remove Sx (as defined earlier) from NHS
Next
Measure solution |Sol|

Взвешенный алгоритм

Weighted MHS (U all nodes, S all subsets)
NHS <- Collection of sets that haven’t been hit yet (equals S)
Sol <- Collection of nodes chosen as a solution
while NHS not empty Then
  x <- choose node from {U/Sol} that has minimum cost = weight(x) / |Sx|
  add x to Sol
  remove Sx (as defined earlier) from NHS
Next
Measure solution |Sol| with cost Σ 𝑤𝑒𝑖𝑔ℎ𝑡(𝑥)∶𝑥∈𝑆𝑜𝑙

Вы можете найти реализацию java для проблемы здесь: