从1..n开始的二进制堆数

时间:2012-08-07 11:37:31

标签: algorithm combinatorics

给定从1到n的整数,确定可以用这些数字构造多少有效的二进制堆。

Example: 1 2 3 4

有效的最小值为:{1 2 3 4}{1 3 2 4}{1 2 4 3}

因此答案是3

1 个答案:

答案 0 :(得分:4)

提示:

二进制堆具有预定义数量的节点和一个定义良好的结构(完整树)
以递归方式思考这个问题。

“选择”哪个非根数转到左子树,哪个转到右边 - 并在子树上递归调用。

f(1) = 1 //no sons
f(2) = f(1) * 1 //one son and a root
//chose which element will go to the left sub-tree, and recursively invoke.
f(3) = Chose(2,1)* f(1) * f(1) * 1 
f(4) = Chose(3,2)*f(2) * f(1) * 1 //chose which 2 elements will go to the left sub tree
...

这个问题被标记为家庭作业,所以我要离开找到一般案例的确切数字。