相关疑难解决方法(0)

具有置换长度参数的javascript置换生成器

我在那里看到了一些发电机,但它们都制成了一个平方矩阵.例如,你给它一个三个项目的列表,它将假设长度的输出也是三个.但是,我想指定项目和长度.

声音就像一个简单的问题,不能相信没有可用的库.如果那里有一个经过测试的库,我想避免自己写这个.任何建议都会很棒.

我发现的例子

var list = 'abc';
perms = permutations(list);
//you cannot define the length
Run Code Online (Sandbox Code Playgroud)

var list = 'abc';
var length = 3;

perms = permutations(list,length);

console.log(perms);

/* output
a,a,a
a,b,c
a,b,a
a,c,a
c,a,a
...
*/
Run Code Online (Sandbox Code Playgroud)

我希望能够改变长度,并相应地创建排列

length = 2

a,a
a,b
b,b
b,a

length = 4

a,a,a,a 
a,a,a,b
....
Run Code Online (Sandbox Code Playgroud)

javascript permutation node.js

2
推荐指数
2
解决办法
3689
查看次数

尽可能多地随机播放阵列

我有这样的数组

[0,2,3]
Run Code Online (Sandbox Code Playgroud)

这个阵列可能的改组是

[0,2,3], [2,3,0], [3,0,2], [3,2,0], [0,3,2], [2,0,3]
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得这些组合?我目前唯一的想法是

n = maximum num of possible combinations, coms = []
while( coms.length <= n )
    temp = shuffle( original the array );
    if temp is there in coms
       return
    else 
       coms.push(temp);
Run Code Online (Sandbox Code Playgroud)

但我不认为这是有效的,因为我们盲目地依赖于随机方法的均匀分布.

这个问题有替代发现吗?

javascript

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

与重复组合

我正在寻找一种方法来获得所有可能的数组摄入组合,所以如果我们有[1,2,3]它会返回

[1,1,1],[1,1,2],[1,1,3],[1,2,2],[1,2,3],[1,3,3],[2,2,2],[2,2,3],[2,3,3],[3,3,3]. 
Run Code Online (Sandbox Code Playgroud)

我看过其他几篇文章,例如这里的这篇文章:https : //stackoverflow.com/a/9960925/1328107 但它们似乎都没有所有组合,即

[ 1, 2, 3 ], [ 1, 3, 2 ],[ 2, 1, 3 ], [ 2, 3, 1 ], [ 3, 1, 2 ], [ 3, 2, 1 ].
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

javascript

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

JavaScript-生成数组的所有排列

我有不同的数组,都带有数字,但是元素数量不同:

var ar1 = [2, 5];
var ar2 = [1, 2, 3];
Run Code Online (Sandbox Code Playgroud)

我需要获取每个数组的所有排列。输出元素的长度应始终与输入数组相同。

此结果应该是一个数组数组,如下所示:

对于ar1:

[2, 5]
[5, 2]
Run Code Online (Sandbox Code Playgroud)

对于ar2:

[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]
Run Code Online (Sandbox Code Playgroud)

我不想要笛卡尔积,每个数组都应该自己处理。

到目前为止,我发现的所有解决方案都仅创建与顺序无关的数组,因此ar1的结果仅是一个数组,而不是两个。

解决方案应适用于输入数组中任意数量的元素。我们可以假设输入数组中没有重复的值。

javascript arrays permutation

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

如何获取一个单元格中的排列列表?

下面是 5 列 - 第 6 列包含所需的结果:5 列中的每个可能排列的名称。

两行只有两列有值 - 因此第 6 列中只有两种排列(由“;”分隔)。

一行有 4 个值,因此有 24 种排列。

在此输入图像描述

抱歉,我无法弄清楚如何将 Excel 中的表格粘贴到 Stack 中,而无需全部重写。

真实数据集中的行可以有 1 个值、5 个值或介于两者之间的任何值。

这里的答案似乎只适用于二维数组 - 该数组是一维的。我想不出任何明显的方法来使其成为 2d 以便这些解决方案发挥作用,这似乎也不是一种有效的方法。上述答案中的一个公式如下(我查看了所有这些公式,但无法弄清楚如何使它们适应我的需求):

=LET(A,A1:C3,B,ROWS(A),C,COLUMNS(A),D,B^C,E,UNIQUE(MAKEARRAY(D,C,LAMBDA(rw,cl,INDEX(IF(A="","",A),MOD(CEILING(rw/(D/(B^cl)),1)-1,B)+1,cl)))),FILTER(E,MMULT(--(E<>""),SEQUENCE(C,,,0))=C))
Run Code Online (Sandbox Code Playgroud)

我在 google 上搜索到的大多数解决方案似乎也无法在 1 行 5 列的简单数组上工作(或者我无法让它们工作)。

我尝试从头开始做,最终生成了一个仅包含数字 1-5 并且没有重复的数字列表 -

=LET(firstperm,VALUE(CONCAT(SEQUENCE(1,COLUMNS(Tablestu[@[First Name]:[Preferred Last Name]])))),lastperm,VALUE(CONCAT(SORT(SEQUENCE(1,COLUMNS(Tablestu[@[First Name]:[Preferred Last Name]])),,-1,TRUE))),diff,(lastperm-firstperm)+1,list,SEQUENCE(diff,1,firstperm),wanted,(IF((ISNUMBER(SEARCH("1",list))*ISNUMBER(SEARCH("2",list))*ISNUMBER(SEARCH("3",list))*ISNUMBER(SEARCH("4",list))*ISNUMBER(SEARCH("5",list))),list,"")),FILTER(wanted,wanted<>"",""))
Run Code Online (Sandbox Code Playgroud)

我想我可以以某种方式拆分这 5 位数字,并使用 INDEX 公式按该顺序返回单词。即 31452 将返回第三个单词,然后是第一个,然后是第四个,依此类推......但我仍然需要一百万次键盘头粉碎才能将其变成我需要的东西,而且它的效率将是愚蠢的低效当我到达那里时。

链接的答案似乎是正确的事情 - 我正在使用 Excel 365,我需要一个使用公式而不是 VBA 或 power query 的解决方案。

LAMDA 和 LET 都很好。

arrays excel permutation excel-formula

0
推荐指数
1
解决办法
314
查看次数

标签 统计

javascript ×4

permutation ×3

arrays ×2

excel ×1

excel-formula ×1

node.js ×1