Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不同方式的数量n+;1系数可以完全用括号括起来_Javascript_Algorithm_Parsing_Recursion_Tree - Fatal编程技术网

Javascript 不同方式的数量n+;1系数可以完全用括号括起来

Javascript 不同方式的数量n+;1系数可以完全用括号括起来,javascript,algorithm,parsing,recursion,tree,Javascript,Algorithm,Parsing,Recursion,Tree,假设我有四个字母a,b,c和d。我想确定哪些方法可以有效地将它们括起来并相乘。例如,(a.b.)(c.d)可以是一种解决方案,或者(a.(b.c)).d可以是另一种解决方案。4个字母的组合数为5。(这也相当于加泰罗尼亚数字n-1,在这种情况下,加泰罗尼亚数字3为5) 我意识到这些组合可以写成完整的二叉树,每个二叉树代表一个组合: abcd abcd / \ / \ ..... /

假设我有四个字母a,b,c和d。我想确定哪些方法可以有效地将它们括起来并相乘。例如,(a.b.)(c.d)可以是一种解决方案,或者(a.(b.c)).d可以是另一种解决方案。4个字母的组合数为5。(这也相当于加泰罗尼亚数字n-1,在这种情况下,加泰罗尼亚数字3为5)

我意识到这些组合可以写成完整的二叉树,每个二叉树代表一个组合:

 abcd                abcd                
  /  \                / \      .....
 /    \              /   \
a     bcd           ab    cd
       / \          / \   /\
      bc  d        a   b c  d
      / \
     b   c
例如,从最深的叶子开始,算法可以为第一棵树生成:1-(b.c)然后2-(b.c).d然后3-a.((b.c).d)


我想要一个递归或正规函数,它可以生成所有可能的树并进行乘法,但不确定如何实现。非常感谢您提供的任何帮助和建议。

这里是对ninjagecko的Python代码的JavaScript改编自

函数关联(seq,kw){
var grouper=kw.grouper | |((a,b)=>[a,b]),
升降器=千瓦。升降器| |(x=>[x]);
如果(序号长度===1){
回程升降机(序号[0]);
}否则{
var结果=[];

对于(让i=1;IsMilar:你知道标签吗?你也应该知道标签。我从你的其他人那里看到你在处理同一个问题。唯一的区别是输出格式。如果你查看标签信息,你会发现一个链接,非常有信息。感兴趣的是:是的,我认为这段代码将非常有用。这段代码生成所有可能的然后,对于每个组合(对于每个[],我必须做一个运算。例如,我将取[[1,[2,[3,4]]],然后进行运算[3,4],然后进行运算[2,[3,4]],然后进行运算[1,[2,[3,4]]。要做到这一点,我想我必须解析这个类似数组数组的结果对象?@ayt_sem我认为您可以使用“grouper”和“lifter”函数来执行操作,然后每个内部表达式都将作为求值返回。请尝试查看。(因此内部的3,4已经被乘以,例如,它将返回12,而不是返回[3,4])我是否必须包含一个库才能使用这些grouper和升降机函数?@ayt_sem否,它们由您定义:)在函数的第二个参数中,您传递了一个具有属性的对象“grouper”和“screeter”函数。如果未定义它们,它们将默认为代码开头看到的
kw.grouper
kw.screeter
。您能向我解释一下kw.grouper和kw.screeter是做什么的吗?