我刚刚读到了关于next_permutation复杂性的另一个问题,虽然我对响应(O(n))感到满意,但似乎算法可能有一个很好的摊销分析,显示出较低的复杂性.有谁知道这样的分析?
尽管阅读了很多关于排列/组合的Q/A:查找JavaScript数组值的所有组合 + JavaScript - 从具有m个元素的n个数组生成组合我还没有找到正确的方法来获得我正在寻找的那种结果.我有一个10值数组:
var arr = [0,1,2,3,4,5,6,7,8,9];
Run Code Online (Sandbox Code Playgroud)
如果我是对的,所有可能的唯一值的置换数组(没有重复)的数量:
[5,9,1,8,2,6,7,0,4,3] [4,8,0,2,1,9,7,3,6,5] ...
Run Code Online (Sandbox Code Playgroud)
是2x3x4x5x6x7x8x9x10 = 3628800
我正在尝试生成一个动态创建'n'数组的函数.例如:
function createArray(0) -> [0,1,2,3,4,5,6,7,8,9]
function createArray(45648) -> [0,1,5,3,2,8,7,9,6] (something like...)
function createArray(3628800) -> [9,8,7,6,5,4,3,2,1,0]
Run Code Online (Sandbox Code Playgroud)
我想要实现它的方式是:
createArray(1)置换最后2个符号(8,9 - > 9,8)
createArray(2-> 6)置换最后3个符号(8,7,9 - > 9,8,7)
createArray(3628800):所有值都被置换(9-> 0)
你认为这可行/容易吗?如果是的话怎么办?
[编辑]
谢谢你的回答
function permute(permutation, val) {
var length = permutation.length,
result = [permutation.slice()],
c = new Array(length).fill(0),
i = 1, k, p,
n = 0;
while (i < length) {
if (c[i] < i) …Run Code Online (Sandbox Code Playgroud) 我想详尽地分析用于排序小数组的子程序,并且需要一种方法来生成特定长度的所有唯一排序的数组.在Python中,这将是具有非负整数作为元素的列表,并且最好在可能时使用最小整数.例如,N = 3:
[[0,0,0],
[0,0,1],
[0,1,0],
[0,1,1],
[0,1,2],
[0,2,1],
[1,0,0],
[1,0,1],
[1,0,2],
[1,1,0],
[1,2,0],
[2,0,1],
[2,1,0]]
Run Code Online (Sandbox Code Playgroud)
[1,1,1]并[2,2,0]没有在上面的列表中属于,因为[0,0,0]并[1,1,0]分别具有相同的相对顺序,同时使用较小的整数.
permutation ×3
arrays ×2
algorithm ×1
big-o ×1
c++ ×1
combinations ×1
generator ×1
javascript ×1
python ×1
sorting ×1
stl ×1