[英]Subset of mutually exclusive items from sets
我設置了S_0, ..., S_N
。 如何找到最大子集T
,使得T
和S_i
的交點I_i
(對於每個0 <= i
<= N)最多包含一個元素。
我對此有一個解決方案,但是我猜測它的速度不必要地慢(本質上是幾個嵌套的for循環嘗試所有組合)。 所以我的問題是:
T
的有效算法? 我認為您不太可能找到解決此問題的有效通用算法,因為我認為它是NP完整的。
如果您有一個有效的算法來解決這個問題,那么您可以解決最大獨立集問題 。
假設您有一個圖,然后為每個邊構造一個包含{i,j}的集合,其中i和j是由邊連接的頂點。
然后,這些集合的最大子集T將是圖形的最大獨立集合。
更有用的是,當且僅當存在同時包含a和b的圖集時,您還可以通過為圖找到一個最大的獨立圖集來表達問題,其中a和b之間存在邊。
然后,您可以使用一些標准求解器來解決最大的獨立集問題,例如Pythons NetworkX中的那個。
您可以通過緩存集合S_a
和S_b
的交集是否為空來加速程序。 而不是建立集合T
,我認為它是S
中某些集合的並集。 您保留一個集合索引的列表T
,並檢查集合S_n
是否與T
相交,請檢查表中是否存在S_n
與其中一個相交的T
中的集合。
我在我的一個Python程序中執行了此操作,因為設置交集測試很慢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.