标签: permutation

你如何迭代地计算0到N的所有可能的排列?

我需要迭代地计算排列.方法签名如下:

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)

您将如何以最有效的方式迭代地执行此操作?我可以递归地执行此操作,但我有兴趣看到许多替代方法来迭代地执行此操作.

language-agnostic math permutation

30
推荐指数
3
解决办法
2万
查看次数

在数组中查找长度为k的所有子集

给定一组{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中的算法和实现.

arrays algorithm permutation set

30
推荐指数
1
解决办法
4万
查看次数

如何有效地生成0和上限N之间的K个非重复整数列表

该问题给出了所有必要的数据:在给定区间[0,N-1]内生成一系列K个非重复整数的有效算法是什么.平凡算法(产生随机数,并把它们添加到序列,看着他们,看看他们是否已经在那里之前)是非常昂贵的,如果ķ大且足够接近ñ.

从链表有效地选择一组随机元素中提供的算法似乎比必要的更复杂,并且需要一些实现.我刚刚发现了另一种似乎可以完成工作的算法,只要您知道所有相关参数,只需一次通过即可.

arrays random algorithm permutation

29
推荐指数
3
解决办法
2万
查看次数

秘密圣诞老人 - 生成"有效"排列

我的朋友们邀请我回家玩秘密圣诞老人的游戏,在那里我们应该抽出很多东西,并为小组中的朋友扮演'圣诞老人'的角色.

所以,我们写下所有的名字并随机选择一个名字.如果我们中的任何一个人最终选择了自己的名字,那么我们会重新洗牌并重新挑选名字(理由是一个人不能成为自己的圣诞老人).

我们有七个人在玩,所以我认为最后的"圣诞老人分配"是(1:7)对自身的排列,有一些限制.

我想邀请各种想法,关于我们如何使用Mathematica特定的或任何编程语言甚至算法来:

  • 列出/打印出所有"有效"的圣诞老人分配
  • 随着玩"秘密圣诞老人"的朋友数量增加,可扩展性

algorithm wolfram-mathematica permutation combinatorics

29
推荐指数
4
解决办法
2579
查看次数

没有递归函数调用的排列

要求:生成集合的所有可能组合的算法,无需重复,或递归调用函数以返回结果.

大多数,如果不是所有的答案都在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)

javascript algorithm permutation

29
推荐指数
6
解决办法
4479
查看次数

递归打印字符串的所有排列(Javascript)

我已经看到了其他语言的这个问题的版本,但不是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)

javascript string algorithm recursion permutation

28
推荐指数
4
解决办法
3万
查看次数

如何在python中生成数组的排列?

我有一个27个元素的数组,我不想生成数组的所有排列(27!)我需要5000个随机选择的排列,任何提示将是有用的...

python permutation

26
推荐指数
4
解决办法
3万
查看次数

python itertools.permutations的算法

有人可以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)

python algorithm permutation

26
推荐指数
1
解决办法
6448
查看次数

如何在Java中生成随机排列?

生成n个数的随机排列的最佳方法是什么?

例如,假设我有一组数字1,2和3(n = 3)

一组所有可能的排列:{123,132,213,231,312,321}

现在,我该如何生成:

  • 上述集合中的一个元素(随机选择)
  • 整个排列集如上所示

换句话说,如果我有一个n个元素的数组,我该如何随意混洗它们?请协助.谢谢.

java random algorithm permutation

26
推荐指数
1
解决办法
2万
查看次数

如何按排序顺序生成数组的所有排列?

我有一个数组,用户可以插入一个字符串.

我有这个代码:

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 没有重复和排序

c++ permutation

26
推荐指数
2
解决办法
8万
查看次数