2013-06-01 48 views
2

我知道有很多類似的問題,我已經閱讀了幾個小時。但他們都沒有滿足我的要求。得到數組數組的第i個組合

我的問題:

給定的n INT數組,他們每個人都有的形式

array_i[] = {0, 1,...,count_i-1}, i = 0,1,...,n-1. 

我們選擇每個陣列中的一個號碼進行組合,這種組合的數量是

count_0*count_1*...*count_{n-1} 

例如

array_0 = {0,1} 
array_1 = {0,1,2} 
array_2 = {0,1} 

的2 * 3 * 2 = 12種組合是

0| 0 0 0 
1| 0 0 1 
2| 0 1 0 
3| 0 1 1 
4| 0 2 0 
5| 0 2 1 
6| 1 0 0 
7| 1 0 1 
8| 1 1 0 
9| 1 1 1 
10| 1 2 0 
11| 1 2 1 

我想要得到的第i個組合(例如第9個組合是{1,1,1}),並得到它的效率。我試過了base-n轉換的想法,像這樣Permutation for numbers in C。但它不是有效的,因爲基地必須是最大的count_i,這可能是不必要的。我也想過使用不同鹼基的想法,但要正確處理關係很困難。

任何建議都是真正的歡迎。

回答

4

從你的鏈接(Permutation for numbers in C)的主要區別是,49^i變爲count_j的的產品:

index_0 = (i/sub_0) % count_0 
index_1 = (i/sub_1) % count_1 
... 

在那裏你預先計算

sub_0 = count_1*count_2*...*count_{n-1} 
sub_1 = count_2*count_3*...*count_{n-1} 
... 

在你的榜樣與數= 2,3 ,2,我們有sub = 6,2,1,因此對於i = 9 index = 1,1,1

+0

但將你的方法應用到我的例子中,prod_0 = 2,prod_1 = 1,以及9組合是index_0 = 9%2 = 1,9%1 = 0? – linusz

+0

重新定義您的陣列從0運行到count-1;否則你的表達式的組合總數是錯誤的。然後count_i成爲array_i中的元素數量。然後在你的例子中,計數是2,3,2。 –

+0

是的,你是對的。但是現在prod_0 = 6,prod_1 = 2,並且第9個組合的索引是index_0 = 9%6 = 3,9%2 = 1? – linusz

相關問題