Rのセットカバー問題の近似を解決または実装しようとしています。このようなデータフレームが与えられます。
sets n
1 s1 1
2 s1 2
3 s1 3
4 s2 2
5 s2 4
6 s3 3
7 s3 4
8 s4 4
9 s4 5
列内の一意の要素数は次のn
とおりです。
unique(d$n)
[1] 1 2 3 4 5
sets
n (宇宙) のすべての一意の要素をカバーする少数のセット (列 ) を計算したいと思います。この例では、s1 {1, 2, 3} と s4 {4, 5} の 2 つのセットがあります。ウィキペディアとインターネットでそれについて読んだことがありますが、貪欲なアルゴリズムを適用して近似値を見つけることができることを知っています。このような問題を解決するための 2 つのパッケージについて言及しているこのリンクも確認しましたが、開始方法さえわかりません。私の実際の例では、40,000 を超えるセットがあり、各セットには 1,000 から 10,000 の要素があり、80,000 の unviverse または一意の要素があります。LPsolve
Rsymphony
開始または続行する方法についてのヘルプまたはガイドは、非常に高く評価されます。
データ
d <- structure(list(sets = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 3L,
4L, 4L), .Label = c("s1", "s2", "s3", "s4"), class = "factor"),
n = c(1, 2, 3, 2, 4, 3, 4, 4, 5)), .Names = c("sets", "n"
), row.names = c(NA, -9L), class = "data.frame")