簡體   English   中英

集合中互斥項的子集

[英]Subset of mutually exclusive items from sets

我設置了S_0, ..., S_N 如何找到最大子集T ,使得TS_i的交點I_i (對於每個0 <= i <= N)最多包含一個元素。

我對此有一個解決方案,但是我猜測它的速度不必要地慢(本質上是幾個嵌套的for循環嘗試所有組合)。 所以我的問題是:

  • 是否有針對此問題的有效算法?
  • 如果不是,是否有找到子集T的有效算法?

我認為您不太可能找到解決此問題的有效通用算法,因為我認為它是NP完整的。

如果您有一個有效的算法來解決這個問題,那么您可以解決最大獨立集問題

證明草圖

假設您有一個圖,然后為每個邊構造一個包含{i,j}的集合,其中i和j是由邊連接的頂點。

然后,這些集合的最大子集T將是圖形的最大獨立集合。

轉換為最大獨立集

更有用的是,當且僅當存在同時包含a和b的圖集時,您還可以通過為圖找到一個最大的獨立圖集來表達問題,其中a和b之間存在邊。

然后,您可以使用一些標准求解器來解決最大的獨立集問題,例如Pythons NetworkX中的那個。

您可以通過緩存集合S_aS_b的交集是否為空來加速程序。 而不是建立集合T ,我認為它是S中某些集合的並集。 您保留一個集合索引的列表T ,並檢查集合S_n是否與T相交,請檢查表中是否存在S_n與其中一個相交的T中的集合。

我在我的一個Python程序中執行了此操作,因為設置交集測試很慢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM