查找包含k位的所有长度为n的二进制字符串的最佳算法是什么?例如,如果n = 4且k = 3,则有......
0111
1011
1101
1110
Run Code Online (Sandbox Code Playgroud)
我需要一个很好的方法来生成这些给定任何n和任何k所以我更喜欢用字符串来完成它.
我一直在搜索使用c ++生成组合的源代码.我找到了一些高级代码,但这仅适用于特定数量的预定义数据.任何人都可以给我一些提示,或者也许是一些想法来产生组合.例如,假设集合S = {1,2,3,....,n},我们选择r = 2.输入将是n和r.在这种情况下,程序将生成长度为2的数组,如5 2输出1 2,1 3等.我很难构建算法.我花了一个月的时间思考这个问题.
这个问题经常以某种形式出现(例如,见此处或此处).所以我认为我会以一般形式呈现它,并提供一个可能供将来参考的答案.
给定任意数量
n的可能不同大小的向量,生成一个n列矩阵,其行描述从这些向量中获取的元素的所有组合(笛卡尔积).
例如,
vectors = { [1 2], [3 6 9], [10 20] }
Run Code Online (Sandbox Code Playgroud)
应该给
combs = [ 1 3 10
1 3 20
1 6 10
1 6 20
1 9 10
1 9 20
2 3 10
2 3 20
2 6 10
2 6 20
2 9 10
2 9 20 ]
Run Code Online (Sandbox Code Playgroud) 不止一次,我需要在MATLAB中生成所有可能的两个向量对,我用它来做几个代码行的循环,即
vec1 = 1:4;
vec2 = 1:3;
i = 0;
pairs = zeros([4*3 2]);
for val1 = vec1
for val2 = vec2
i = i + 1;
pairs(i,1) = val1;
pairs(i,2) = val2;
end
end
Run Code Online (Sandbox Code Playgroud)
生成......
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
4 1
4 2
4 3
Run Code Online (Sandbox Code Playgroud)
必须有一个更好的方法来做这个更多的MATLAB'esque?
NB nchoosek没有做反向双这是我需要的东西(即2 1和1 2),我不能只是扭转和追加nchoosek输出,因为对称对将被包含两次.
我需要能够创建一个包含输入列表的所有可能组合的列表.例如,列表[1,2,3]应该返回[1 [1,2] [1,3] 2 [2,3] 3 [1,2,3]]
列表不必具有任何特定顺序.在这个网站上我发现了很多使用它的函数,itertools但是当我只需要一个函数时它们就会返回对象list.
我在编写代码时难以在JavaScript中生成包含m个元素的n个数组的组合.我已经在其他语言中看到了类似的问题,但答案包含语法或库魔法,我不确定如何翻译.
考虑这些数据:
[[0,1], [0,1,2,3], [0,1,2]]
Run Code Online (Sandbox Code Playgroud)
3个数组,其中包含不同数量的元素.我想要做的是通过组合每个数组中的项来获得所有组合.
例如:
0,0,0 // item 0 from array 0, item 0 from array 1, item 0 from array 2
0,0,1
0,0,2
0,1,0
0,1,1
0,1,2
0,2,0
0,2,1
0,2,2
Run Code Online (Sandbox Code Playgroud)
等等.
如果数组的数量是固定的,那么很容易进行硬编码实现.但阵列的数量可能会有所不同:
[[0,1], [0,1]]
[[0,1,3,4], [0,1], [0], [0,1]]
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.
我试图在长度为14的向量中生成0和1的所有可能组合.是否有一种简单的方法可以将输出作为向量列表,甚至更好的数据帧?
为了更好地展示我正在寻找的东西,让我们假设我只需要一个长度为3的向量.我希望能够生成以下内容:
(1,1,1), (0,0,0), (1,1,0), (1,0,0), (1,0,1), (0,1,0), (0,1,1), (0,0,0)
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激!
谢谢,
我正在寻找类似于Path.Combine方法的东西,这将有助于我正确地组合绝对路径和相对路径.例如,我想要
Path.Combine(@"c:\alpha\beta", @"..\gamma");
Run Code Online (Sandbox Code Playgroud)
产生c:\alpha\gamma的,而不是c:\alpha\..\gamma为Path.Combine做.有没有简单的方法来实现这一目标?不用说,我也希望周期.路径或多个..路径(例如..\..\)正常工作.
我需要一个算法,它返回一个字符串中所有字符的所有可能组合.
我试过了:
$langd = strlen($input);
for($i = 0;$i < $langd; $i++){
$tempStrang = NULL;
$tempStrang .= substr($input, $i, 1);
for($j = $i+1, $k=0; $k < $langd; $k++, $j++){
if($j > $langd) $j = 0;
$tempStrang .= substr($input, $j, 1);
}
$myarray[] = $tempStrang;
}
Run Code Online (Sandbox Code Playgroud)
但是,它只返回与字符串长度相同的数量组合.
说$input = "hey",结果将是:hey, hye, eyh, ehy, yhe, yeh.
我有兴趣找到第n行pascal三角形(不是特定元素,而是整行本身).最有效的方法是什么?
我想到了通过总结上面行中相应元素来构造三角形的传统方法:
1 + 2 + .. + n = O(n^2)
Run Code Online (Sandbox Code Playgroud)
另一种方法可能是使用特定元素的组合公式:
c(n, k) = n! / (k!(n-k)!)
Run Code Online (Sandbox Code Playgroud)
对于行中的每个元素,我认为根据计算组合的方式,前一种方法需要更多时间.有任何想法吗?
algorithm combinations binomial-coefficients pascals-triangle