我需要你帮助解决这些问题。我在visual studio中解决了一个递归函数来计算n-ary树的高度。当我在一棵小树上测试它时,它给了我高度的值。但是,当我编译更大数据的代码时,运行时间超过3天而没有结果。我使用的功能如下:
Array (
[0] => Array ( [KRA_category] => Business )
[1] => Array ( [KRA_category] => Business )
[2] => Array ( [KRA_category] => People )
[3] => Array ( [KRA_category] => Business )
[4] => Array ( [KRA_category] => Business )
[5] => Array ( [KRA_category] => Business )
)
提前谢谢..
答案 0 :(得分:1)
好吧,你用两次相同的参数调用相同的递归函数,这会让事情变得很慢。
unsigned int Height(NaryNode *root)
{
unsigned int HeightMax = 0;
unsigned i;
for (i = 0; i < root->nchild; i++)
{
auto currHeigth = Height(root->child[i])
if (currHeight > HeightMax)
HeightMax = currHeight;
}
return (HeightMax + 1);
}
会给你一个巨大的加速。
答案 1 :(得分:0)
您为每个子树计算两次高度 如果树很深,这将花费很长时间。
为简单起见,假设每个节点只有一个子节点。
然后从根开始,你计算它的孩子的高度两次
对于这些计算中的每一个,您计算该孩子的两次高度 - 即四个函数调用。
对于这四个中的每一个,您都要进行两次计算 - 即八次计算。
对于每个级别下降,您将调用次数增加一倍Height
,并计算具有32个单子节点的树的高度需要超过4个十亿函数调用。
将Height(root->child[i])
的结果存储在变量中。