我需要迭代地计算排列.方法签名如下:
int[][] permute(int n)
为了n = 3例如,返回值将是:
[[0,1,2],
[0,2,1],
[1,0,2],
[1,2,0],
[2,0,1],
[2,1,0]]
Run Code Online (Sandbox Code Playgroud)
您将如何以最有效的方式迭代地执行此操作?我可以递归地执行此操作,但我有兴趣看到许多替代方法来迭代地执行此操作.
给定一组{1,2,3,4,5...n}n个元素,我们需要找到长度为k的所有子集.
例如,如果n = 4且k = 2,output将是{1, 2}, {1, 3}, {1, 4}, {2, 3}, {2, 4}, {3, 4}.
我甚至无法弄清楚如何开始.我们不必使用内置的库函数,如next_permutation等.
需要C/C++或Java中的算法和实现.
该问题给出了所有必要的数据:在给定区间[0,N-1]内生成一系列K个非重复整数的有效算法是什么.平凡算法(产生随机数,并把它们添加到序列,看着他们,看看他们是否已经在那里之前)是非常昂贵的,如果ķ大且足够接近ñ.
在从链表中有效地选择一组随机元素中提供的算法似乎比必要的更复杂,并且需要一些实现.我刚刚发现了另一种似乎可以完成工作的算法,只要您知道所有相关参数,只需一次通过即可.
我的朋友们邀请我回家玩秘密圣诞老人的游戏,在那里我们应该抽出很多东西,并为小组中的朋友扮演'圣诞老人'的角色.
所以,我们写下所有的名字并随机选择一个名字.如果我们中的任何一个人最终选择了自己的名字,那么我们会重新洗牌并重新挑选名字(理由是一个人不能成为自己的圣诞老人).
我们有七个人在玩,所以我认为最后的"圣诞老人分配"是(1:7)对自身的排列,有一些限制.
我想邀请各种想法,关于我们如何使用Mathematica特定的或任何编程语言甚至算法来:
要求:生成集合的所有可能组合的算法,无需重复,或递归调用函数以返回结果.
大多数,如果不是所有的答案都在JavaScript中的Permutations提供?从循环或其他函数中递归调用函数以返回结果.
循环内的递归函数调用示例
function p(a, b, res) {
var b = b || [], res = res || [], len = a.length;
if (!len)
res.push(b)
else
for (var i = 0; i < len
// recursive call to `p` here
; p(a.slice(0, i).concat(a.slice(i + 1, len)), b.concat(a[i]), res)
, i++
);
return res
}
p(["a", "b", "c"]);
Run Code Online (Sandbox Code Playgroud)
当前的问题试图在线性过程中创建给定的排列,依赖于先前的排列.
例如,给定一个数组
var arr = ["a", "b", "c"];
Run Code Online (Sandbox Code Playgroud)
确定可能的排列总数
for (var len = 1, i = k …Run Code Online (Sandbox Code Playgroud) 我已经看到了其他语言的这个问题的版本,但不是JS.
是否可以在一个函数中递归执行此操作?
我理解我需要获取字符串中的第一个元素,然后将其附加到每个解决方案中,以便对字符串的其余部分进行递归.从逻辑上讲,我理解递归是如何进行的.我只是不明白如何将第一个字符串附加到每个递归解决方案上
var myString = "xyz";
function printPermut(inputString){
var outputString;
if(inputString.length === 0){
return inputString;
}
if(inputString.length === 1){
return inputString;
}
else{
for(int i = 0; i<inputString.length(); i++){
//something here like:
//outputString = outputString.concat(printPermut(inputString.slice(1))??
//maybe store each unique permutation to an array or something?
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个27个元素的数组,我不想生成数组的所有排列(27!)我需要5000个随机选择的排列,任何提示将是有用的...
有人可以itertools.permutations在Python标准的lib 2.6中解释例程算法吗?我不明白为什么会这样.
代码是:
def permutations(iterable, r=None):
# permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC
# permutations(range(3)) --> 012 021 102 120 201 210
pool = tuple(iterable)
n = len(pool)
r = n if r is None else r
if r > n:
return
indices = range(n)
cycles = range(n, n-r, -1)
yield tuple(pool[i] for i in indices[:r])
while n:
for i in reversed(range(r)):
cycles[i] -= 1
if cycles[i] == 0: …Run Code Online (Sandbox Code Playgroud) 生成n个数的随机排列的最佳方法是什么?
例如,假设我有一组数字1,2和3(n = 3)
一组所有可能的排列:{123,132,213,231,312,321}
现在,我该如何生成:
换句话说,如果我有一个n个元素的数组,我该如何随意混洗它们?请协助.谢谢.
我有一个数组,用户可以插入一个字符串.
我有这个代码:
int main(){
char anagrama[13];
cin >> anagrama;
for(int j = 0; j < strlen(anagrama); j++){
cout << anagrama[j];
for(int k = 0; k < strlen(anagrama); k++){
if(j != k)
cout << anagrama[k];
}
cout << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我需要按排序顺序排列字符串的所有排列.
例如,如果用户写:abc,输出必须是:
abc
acb
bac
bca
cab
cba
Run Code Online (Sandbox Code Playgroud)
并且我的代码没有显示所有排列,也没有排序
你能帮助我吗?
我需要在没有已经实现的功能的情况下进行实现.
我认为有一个递归函数,但我不知道如何.
这是一个例子:http: //www.disfrutalasmatematicas.com/combinatoria/combinaciones-permutaciones-calculadora.html 没有重复和排序