Javascript创建一个具有唯一值组合的数组[重复]
Posted
技术标签:
【中文标题】Javascript创建一个具有唯一值组合的数组[重复]【英文标题】:Javascript create an array with unique combination of values [duplicate] 【发布时间】:2019-03-24 00:11:53 【问题描述】:尽管阅读了很多关于排列/组合的 Q/A:Finding All Combinations of javascript array values + JavaScript - Generating combinations from n arrays with m elements 我还没有找到正确的方法来获得我正在寻找的那种结果。 我有一个 10 值数组:
var arr = [0,1,2,3,4,5,6,7,8,9];
如果我是对的,所有可能的唯一值排列数组的数量(不重复):
[5,9,1,8,2,6,7,0,4,3] [4,8,0,2,1,9,7,3,6,5] ...
是 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]
我想实现它的方法是:
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)
if (n <= val)
k = i % 2 && c[i];
p = permutation[i];
permutation[i] = permutation[k];
permutation[k] = p;
++c[i];
i = 1;
if (n == val)
arr = permutation.slice();
console.log("n="+n+"\n"+arr);
console.log( 'Duration: '+((new Date() - t1)/1000)+'s' );
break;
else n+=1;
else
c[i] = 0;
++i;
let t1 = new Date();
permute([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 100000); // <- array requested
控制台:n=100000 + 0,5,8,1,7,2,3,6,4,9 + 持续时间:0.004s
【问题讨论】:
有可能,到目前为止,您是否尝试过编写任何代码? 您真的需要对各种排列进行编号吗?仅仅有一个随机打乱的数组就足够了吗? 你会考虑使用像generatorics这样的Node模块吗? 嗯,听起来像 CS 练习,也许你可以展示你的代码。 @CertainPerformance 还没有,只是通过探索***上的现有函数开始工作 【参考方案1】:由于这个问题没有描述一个特定的编程问题,而是一个任务,而且是一个相当复杂的问题,你不应该期望一个完整的解决方案作为答案,但我会尝试描述一种可能的方法这个:
如你所说,排列的数量是 2x3x4x...
您可以检查是否 n > 2,如果为真,则检查是否 n > 2x3,如果为真,则检查是否 n > 2x3x4。这样你就会知道你想要置换多少个尾数组索引。然后,您必须确保以排序的线性方式计算排列,不会两次生成相同的排列。那是一个数学问题,编码本身应该相当容易(类似于在更改索引时切换位置 n 次)。
不确定这是否是您正在寻找的答案,但制作一个独特的排列算法听起来相当复杂(例如,请参阅另一个问题的答案https://***.com/a/11425168/9521900),它链接到此***文章https://en.wikipedia.org/wiki/Permutation#Generation_in_lexicographic_order on generate in字典顺序。
编辑:从 Raj Sharmas 对您的问题的评论来看,这个关于生成排列的答案似乎也很有价值: https://***.com/a/37580979/3090583
【讨论】:
以上是关于Javascript创建一个具有唯一值组合的数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章