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