的載體讓v = {x: x in {-1,0,1}}
使得|v| = 9
生成所有可能的組合爲維度9
每個元素x
矢量v
維度可以採取3
可能值-1,0
或1
我怎樣才能生成所有可能的矢量v
的組合?
Example:
V = {1,0,-1,0,0,1,1,1,0},V = { - 1,0,-1,1,0,0,1, 1,0}等等......
我纔有3^9
組合?
謝謝。
的載體讓v = {x: x in {-1,0,1}}
使得|v| = 9
生成所有可能的組合爲維度9
每個元素x
矢量v
維度可以採取3
可能值-1,0
或1
我怎樣才能生成所有可能的矢量v
的組合?
Example:
V = {1,0,-1,0,0,1,1,1,0},V = { - 1,0,-1,1,0,0,1, 1,0}等等......
我纔有3^9
組合?
謝謝。
如果您正在使用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
謝謝@Thierry。我試圖找到一個類似的工具itertools.product在c + + –
那麼:https://github.com/ryanhaining/cppitertools/blob/master/README.md – ThiS
的想法是這樣的:
您擁有的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解釋多一點的遞歸發生器的工作原理。
謝謝@rendn。那麼我不認爲它可以在我的情況下工作,這是我在C++中實現的代碼,這是你發佈的代碼。它不生成尺寸爲9的向量 –
什麼編程語言? – ThiS
Thierry我正在使用C++。我遲到了回答 –