2013-07-16 49 views
4

庫存算法ķ(從一組尺寸的Ñ)(例如,如這裏所描述:generate all subsets of size k from a set)趨向於使用「字典」順序,其中最左邊的元素變化最慢。我還發現一個算法,可以最小化枚舉中連續子集之間的差異,有點像Gray code大小k的所有子集,最大化的子集之間的差值,用於枚舉大小的所有子集

我想在每個步驟生成一個子集,它最大的不同於之前的所有子集。 (這是同爲「最大化連續子集之間的差值」作爲問題的先前配方)。例如,考慮從一組大小爲8的大小爲4的子集,一個可接受的順序開始

ABCD 
    EFGH 
AB GH 
    CDEF 
AB EF 
    CD GH 

請注意,基本集足夠大,以至於容納 n C k內存中的項是不切實際的。

回答

1

在您所需的輸出中,每個子集的下一個子元素的數量爲2,1,2,1,2。我從字典順序的子集列表中選擇第一個,然後是最後一個,然後是第二個,然後是第二個,然後從中得到相同的序列。在每個步驟中選擇最遠的順序並且尚未被選擇的子集。

我沒有得到相同的子集序列,只是差異數量相同的序列。

我已經滿意自己,這也適用於其他一些小案例,現在我期待反例和倒票。

啊,所以你不想依賴先建立字典順序的子集。我最初的想法是有兩個子集生成器同時運行,一個從第一個子集開始(,例如AB)並繼續,另一個從最後(,例如CD)開始並向後退出。如果你明白我的意思。

+0

你讓我意識到我錯誤地闡述了這個問題。請參閱編輯。 (這個差異只有在比例較大時纔會變得明顯,你的解決方案在set * n *和set * n * + 2之間沒有提供足夠大的間隔) – zwol

相關問題