找到搜索最优树的最差成本

时间:2016-01-20 21:51:18

标签: algorithm tree binary-search-tree

这是我的问题。我有一个整数的排序列表。我的目标是找到搜索最优二叉搜索树的最差成本。通过添加用于查找数字的每个节点的数量来计算成本。 (我们不添加号码)。

例如,4个第一个方块的OBST的最差成本如下:link to the illustration。 (N.B:叶子不计入费用) 最优树的最差成本是10。

我尝试了很多东西,但是我找不到一个好的算法(我需要最好的,但不能使用蛮力)。

long long maxRootLeafSum(const vector<long long>& v ){
long long sum = 0;

switch (v.size())
{
case 0:
    sum = 0;
    break;
case 1:
    sum = 0;
    break;
case 2:
    sum = v[0];
    break;
case 3:
    sum = v[1];
    break;
case 4:
    sum = v[0] + v[2];
    break;
default:
    long long leftCost = 0, rightCost = v[v.size() - 2], i = 0, j = 0;

    for (i = v.size() - 4; i >= j; i -= 2)
    {
        rightCost += v[i];
        for (; leftCost < rightCost; ++j)
            leftCost += v[j];

    }
    sum = min(leftCost, rightCost);
    break;
}

return sum;

}

这可能适用于某些情况,但并非总是如此。我发现在4个节点下,我可以立即计算出结果。我相信可能有办法找到给定数据集的最佳根节点。如果是这样,我可以使用递归函数来找到最佳树的最差成本。也许我也完全没有走上正轨!

谢谢!

0 个答案:

没有答案