2014-02-13 46 views
0

的載體讓v = {x: x in {-1,0,1}}使得|v| = 9生成所有可能的組合爲維度9

每個元素x矢量v維度可以採取3可能值-1,01

我怎樣才能生成所有可能的矢量v的組合?


Example: V = {1,0,-1,0,0,1,1,1,0},V = { - 1,0,-1,1,0,0,1, 1,0}等等......

我纔有3^9組合?

謝謝。

+1

什麼編程語言? – ThiS

+0

Thierry我正在使用C++。我遲到了回答 –

回答

1

如果您正在使用python,你可以簡單地這樣做:

import itertools 
v = itertools.product([-1,0,1], repeat=9) 
# v will be a generator 
# to have the whole list as tuples 
list_v = list(v) 

# Verify the number of combination 
print len(list(v)) 

和它給你:19683,或3,您使用^ 9

+0

謝謝@Thierry。我試圖找到一個類似的工具itertools.product在c + + –

+1

那麼:https://github.com/ryanhaining/cppitertools/blob/master/README.md – ThiS

1

的想法是這樣的:

您擁有的v每個元素(9你的情況)的位置:

- - - - - - - - - 

每個位置可容納三個不同的值(-1 | 0 | 1),然後組合的總數等於3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 = 3^9。

爲了產生這樣的組合,只模擬這個過程,例如用for循環,例如,爲三個位置:

values[] = {-1, 0, 1}; 
for (i = 0; i < 3; i++) 
    for (j = 0; j < 3; j++) 
     for (k = 0; k < 3; k++) 
      print values[i], values[j], values[k] 

在你的情況下,你需要九個嵌套循環!一個更簡單的實現將涉及遞歸,但它有時更難理解。這裏是無論如何想法:

values[] = {-1, 0, 1}; 
void generate(int position) 
{ 
    if (position == 0) { 
     println(); 
     return; 
    } 

    for (int i = 0; i < 3; i++) { 
     print(values[i], ", "); 
     generate(position - 1); 
    } 
} 

// call the function with 
generate(9); 

another answer解釋多一點的遞歸發生器的工作原理。

+0

謝謝@rendn。那麼我不認爲它可以在我的情況下工作,這是我在C++中實現的代碼,這是你發佈的代碼。它不生成尺寸爲9的向量 –

相關問題