我正在尋找一種算法,它將有限數量的集合S_1,...,S_n作爲輸入並輸出列表x_1,...,x_n,其中x_i屬於S_i,對於i = 1,...,n和所有x_i是成對的不同的。請注意,集合S_i一般不會成對分離。我們可以將這樣的名單稱爲家庭的橫向{S_1,...,S_n},正如通常所做的那樣。獲取有限集合的有限族的隨機橫向
應該以這樣的方式隨機選擇列表,即每個可能的列表作爲輸出同樣可能。我不在乎發生了什麼,沒有這樣的列表存在。我希望算法相當快,特別是在使選擇被認爲太慢之前列舉所有列表。
我正在尋找一種算法,它將有限數量的集合S_1,...,S_n作爲輸入並輸出列表x_1,...,x_n,其中x_i屬於S_i,對於i = 1,...,n和所有x_i是成對的不同的。請注意,集合S_i一般不會成對分離。我們可以將這樣的名單稱爲家庭的橫向{S_1,...,S_n},正如通常所做的那樣。獲取有限集合的有限族的隨機橫向
應該以這樣的方式隨機選擇列表,即每個可能的列表作爲輸出同樣可能。我不在乎發生了什麼,沒有這樣的列表存在。我希望算法相當快,特別是在使選擇被認爲太慢之前列舉所有列表。
將集合和元素的發生率表示爲二部圖,並找到maximum cardinality bipartite matching。
正如Ante所觀察到的,我們正在尋找二分配匹配,但這裏最難的部分是找到一個隨機匹配。如果你的圖表足夠大,那麼你可能不得不解決Jerrum和Sinclair快速混合的馬爾可夫鏈。否則,有一個O(2^n poly(n))時間動態程序用於計算最大匹配(與用於枚舉它們的O(n!) - 時間算法相反),您可以通過重複計數在使用邊緣或不匹配之後匹配的數量。
n有多大?有多少種不同的元素?大致等分可行嗎? –
在我看來,這個問題太廣泛了。此外,它可能是脫離主題,而屬於[計算機科學](https://cs.stackexchange.com/)。 – Hexaholic
在實際應用中我記住:n <10,每個S_n可以有多達幾百個元素。 – witzar