介紹
在試圖做一個曲線圖上節點的一些cathegorization(將呈現differenty),我發現自己面臨着以下問題:分區的超集,讓原來的集列表中的每個分區
的問題
鑑於元件S = {0, 1, ... M}
超集和非不相交子集其T_i
若干n
,與0 <= i < n
,什麼是最好的ALG算法找出該集合的分區S
,稱爲P
?
P = S
是所有脫節分區原超S
的P_j
的工會,與0 <= j < M
,使得對所有的元素x in P_j
,每x
有「父母」的同一列表中的「原始」設置T_i
。
例
S = [1, 2, 3, 4, 5, 6, 8, 9]
T_1 = [1, 4]
T_2 = [2, 3]
T_3 = [1, 3, 4]
因此,所有P_j
s就:
P_1 = [1, 4] # all elements x have the same list of "parents": T_1, T_3
P_2 = [2] # all elements x have the same list of "parents": T_2
P_3 = [3] # all elements x have the same list of "parents": T_2, T_3
P_4 = [5, 6, 8, 9] # all elements x have the same list of "parents": S (so they're not in any of the P_j
問題
- 什麼是好的功能/班在Python包計算所有
P_j
小號和他們的「父母」,理想的名單限制爲numpy
和scipy
?也許已經有這樣一個功能 - 什麼是最好的算法找到這些分區
P_j
s 和爲每一個,「父母」的列表?讓我們注意T_0 = S
我覺得蠻力的方法是產生T
將所有2組合和拆分它們在至多3個不相交的集合,這將被添加回T
集和池然後重複這個過程直到所有產生的T
不相交,因此我們已經到達了我們的答案 - P
集合。有一點問題可能是在那裏緩存所有的「父母」。
我懷疑 a 動態編程方法可以用來優化算法。
注:我會愛到寫在乳膠(通過MathJax)數學部分,但不幸的是這不是:-(
以下內容可能會將您的想象力繪製成對您問題的解答:http://www.geekviewpoint.com/java/bitwise/power_set。在你的情況下,你已經開始了超集。但那裏的邏輯應該有所幫助。 – kasavbere
@kasavbere我已經有那幅畫了,但我不想要那個權力。子集已經給出。這基本上是一個導尿問題。 – Flavius
'0 WolframH