是否确定现在scipy.misc.comb确实比特别实施更快?
根据一个旧的答案,统计:Python中的组合,这个自制函数比scipy.misc.comb计算组合时更快nCr:
def choose(n, k):
"""
A fast way to calculate binomial coefficients by Andrew Dalke (contrib).
"""
if 0 <= k <= n:
ntok = 1
ktok = 1
for t in xrange(1, min(k, n - k) + 1):
ntok *= n
ktok *= t
n -= 1
return ntok // ktok
else:
return 0
Run Code Online (Sandbox Code Playgroud)
但是在我自己的机器上运行一些测试后,使用这个脚本似乎不是这样的:
from scipy.misc import comb
import random, time
def choose(n, k):
"""
A fast way to …Run Code Online (Sandbox Code Playgroud) 我有一个数组数组,如下所示:
[['1','2'],['a','b'],['x','y']]
Run Code Online (Sandbox Code Playgroud)
我需要将这些数组组合成一个字符串,其中包含所有三个集合的所有可能组合,仅向前.我已经看到很多关于任何顺序的所有可能组合的例子,这不是我想要的.例如,我不希望第一组中的任何元素出现在第二组之后,或者第三组中的任何元素出现在第一组或第二组之前,依此类推.因此,对于上面的示例,输出将是:
['1ax', '1ay', '1bx', '1by', '2ax', '2ay', '2bx', '2by']
Run Code Online (Sandbox Code Playgroud)
数组的数量和每组的长度是动态的.
有人知道如何在Ruby中解决这个问题吗?
现在我正在尝试编写一个带有数组和整数n的函数,并给出每个大小为n的组合的列表(所以是int数组的列表).我能够使用n个嵌套循环编写它,但这仅适用于特定大小的子集.我无法弄清楚如何推广它适用于任何大小的组合.我想我需要使用递归?
这是3个元素的所有组合的代码,我需要一个适用于任意数量元素的算法.
import java.util.List;
import java.util.ArrayList;
public class combinatorics{
public static void main(String[] args) {
List<int[]> list = new ArrayList<int[]>();
int[] arr = {1,2,3,4,5};
combinations3(arr,list);
listToString(list);
}
static void combinations3(int[] arr, List<int[]> list){
for(int i = 0; i<arr.length-2; i++)
for(int j = i+1; j<arr.length-1; j++)
for(int k = j+1; k<arr.length; k++)
list.add(new int[]{arr[i],arr[j],arr[k]});
}
private static void listToString(List<int[]> list){
for(int i = 0; i<list.size(); i++){ //iterate through list
for(int j : list.get(i)){ //iterate through array
System.out.printf("%d ",j);
}
System.out.print("\n");
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试生成长度为N的给定List的所有2 ^ N-1种可能组合的集合.该集合将组合中的元素数量映射到包含特定长度组合的有序组合列表.例如,对于List:
[A, B, C, D]
Run Code Online (Sandbox Code Playgroud)
我想生成地图:
{
1 -> [{A}, {B}, {C}, {D}]
2 -> [{A, B}, {A, C}, {A, D}, {B, C}, {B, D}, {C, D}]
3 -> [{A, B, C}, {A, B, D}, {A, C, D}, {B, C, D}]
4 -> [{A, B, C, D}]
}
Run Code Online (Sandbox Code Playgroud)
生成的数据库应保持原始顺序(其中[]表示有序系列(List),并{}表示无序组(Set)),并尽可能快地运行.
我整天都在努力处理一些递归代码(我知道实现应该是递归的)但是无法深入了解它.
有没有我可以使用的参考/这种算法的现成实现?
我刚开始学习概率,我正在寻找可以在linux上工作的工具.
我找到了一些组合软件包http://rss.acs.unt.edu/Rdoc/library/Combinations/html/00Index.html但是当我尝试安装它们时,该过程失败并显示以下消息:
> install.packages("Combinations")
Installing package(s) into ‘/home/maxim/R/x86_64-pc-linux-gnu-library/2.13’
(as ‘lib’ is unspecified)
Warning message:
In getDependencies(pkgs, dependencies, available, lib) :
package ‘Combinations’ is not available (for R version 2.13.1)
Run Code Online (Sandbox Code Playgroud) 我已经在SO上阅读/尝试了很多建议的答案,但没有一个能解决问题
$array = array('Alpha', 'Beta', 'Gamma');
Run Code Online (Sandbox Code Playgroud)
如何获得所有可能的组合?
预期产量:
array('Alpha',
'Beta',
'Gamma',
'Alpha Beta',
'Alpha Gamma',
'Beta Alpha',
'Beta Gamma',
'Gamma Alpha',
'Gamma Beta',
'Alpha Beta Gamma',
'Alpha Gamma Beta',
'Beta Alpha Gamma',
'Beta Gamma Alpha',
'Gamma Alpha Beta',
'Gamma Beta Alpha')
Run Code Online (Sandbox Code Playgroud)
注意:我正在寻找的答案应包括所有组合和所有不同的安排.例如:'Alpha Beta'和'Beta Alpha'是两个不同的字符串,两者都应该在输出数组中.
提前致谢
我有一个这种类型的列表List>包含这个
List<int> A = new List<int> {1, 2, 3, 4, 5};
List<int> B = new List<int> {0, 1};
List<int> C = new List<int> {6};
List<int> X = new List<int> {....,....};
Run Code Online (Sandbox Code Playgroud)
我希望拥有这样的所有组合
1-0-6
1-1-6
2-0-6
2-1-6
3-0-6
Run Code Online (Sandbox Code Playgroud)
等等.
据你说这是使用Linq解决这个问题吗?
我有一个7个数字(1,2,3,4,5,6,7)的数组,我想要成对的5个数字,如(1,2,3,4,5),(1,2,3) ,4,6,),(1,2,3,4,7).(1,2,3,4,5)等于(4,5,3,1,2)
我想知道PHP或任何算法中是否有函数可以执行此操作?我不知道从哪里开始.你能帮助我吗 ?
我希望将7个给定数字(它们从一个数组中取出)的所有组合放入5个插槽中,无视顺序
我有值池,我想通过从某些池中挑选来生成所有可能的无序组合.
例如,我想从池0,池0和池1中选择:
>>> pools = [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
>>> part = (0, 0, 1)
>>> list(product(*(pools[i] for i in part)))
[(1, 1, 2), (1, 1, 3), (1, 1, 4), (1, 2, 2), (1, 2, 3), (1, 2, 4), (1, 3, 2), (1, 3, 3), (1, 3, 4), (2, 1, 2), (2, 1, 3), (2, 1, 4), (2, 2, 2), (2, 2, 3), (2, 2, 4), (2, 3, 2), (2, 3, 3), (2, 3, 4), …Run Code Online (Sandbox Code Playgroud)