寻找算法下界的决策树

时间:2020-04-15 17:47:43

标签: algorithm binary-tree lower-bound

找到基于比较的算法下限的一种方法是使用决策树。关于此方法,您有两个问题:

1)我们知道树的高度是将根节点连接到最远的叶节点的路径(最长的路径),该路径等于从根节点到叶节点的比较次数。因此,当我们为基于比较的算法绘制树时,我们只需要找到最坏情况的时间,该时间对应于最大路径,因此对应于树的高度。现在,对于任何树,其高度<= log2(叶节点数)与Cworst(n)<= log2(n)相同,现在我们为Cworst(n)设置了下界,因此问题的下界= log2(n)。我的理解正确吗?

2)对于特定比较问题,Cworst(n)不等式是什么意思?这是否意味着对于一个特定的比较问题,我们可以绘制许多树,并且每次在最坏情况下的路径都具有满足等式的值?这意味着对于一个特定的问题,我们可以绘制许多不同的树?

1 个答案:

答案 0 :(得分:1)

决策树说明了在特定输入类别上算法的可能执行。对于基于比较的排序,类别将由一定大小的所有输入列表组成,因此n = 1有一棵树,n = 2有一棵树,n = 3有一棵树,以此类推。每棵树都不知道确切的输入值,但是根据输入值之间的比较方式,跟踪计算可能进入的方向。

决策树的一种应用是推断运行时复杂性的上限和下限。如前所述,一棵树的高度代表该树的输入大小在运行时的上限,并且如果您可以找到算法的所有决策树的输入大小和树高度之间的一般关系,您将发现运行时上限的表达式。例如,如果您分析冒泡排序,您会发现输入大小为n的决策树的高度大约为n * (n + 1) / 2,因此现在您知道其运行时受到O(n^2)的限制。而且由于我们在常规运行时有一个上限,所以在最坏情况下的运行时也有一个上限。

在查看特定算法时,我们通常会对它可能有多快(最佳情况),通常有多快(平均情况)以及可能有多慢(最坏情况)感兴趣。而且,我们通常使用下限(Omega)来表示最佳情况,因为最佳情况的下限也是常规运行时的下限;同样,我们通常使用上限(O)表示最坏情况,因为最坏情况的上限也是常规运行时的上限。但是我们不必-O,Omega和Theta只是数学工具,它们在谈论某个函数时,并不关心在我们的案例中该函数描述了运行时复杂性。因此,让我们做一些不同寻常的事情:让我们看一下 all 可能存在的问题的算法,并使用决策树尝试找出 all 最坏情况下的复杂性。然后,有趣的问题不是上限是多少,因为创建极慢的排序算法很容易。相反,我们对下限感兴趣:最好的最坏情况是什么?哪种算法能最好地保证在最坏的情况下会慢得多?

任何排序算法都必须能够处理其输入元素的任何顺序。每个叶节点代表输入元素的一个特定最终排列(重新排列),并且在输入大小为n的情况下,存在n!个排列。因此,输入大小为n的决策树至少具有n!个叶节点。任何想要最坏情况的算法都需要有一个平衡的树,其中所有叶节点都位于最深或第二深级别。具有n!个叶节点的平衡树的高度必须为Omega(n lg n)。现在我们知道了一个非常有趣的东西:对于任何基于比较的排序算法,最佳可能的高度(代表最坏情况的运行时间)至少为 n lg n!换句话说,不可能创建总是比n lg n更快的基于比较的排序算法。

(注意:height <= log2(leaf nodes)仅适用于平衡树。一棵树的八棵树可能等于节点数减去一。)