【问题标题】:Worst Case Binary Search?最坏情况二分查找?
【发布时间】:2014-03-16 20:00:35
【问题描述】:
问题是:
为了区分普通邮件和垃圾邮件,
设计了一种具有多种特征的算法。每个功能都提供
有关消息的信息,例如可疑单词的数量,
消息的长度、与垃圾邮件模板的匹配程度等。每个特征都是具有两个值的离散变量,例如,低/高、短/长和相似/不相似。已使用具有 255 个节点的树来决定是否拒绝电子邮件。多少操作/步骤/时间单位
最多需要处理每封电子邮件吗?
我在想这将是一棵完美的二叉树,所以 2^n - 1 = 255,因此 n = 8。但是,我开始考虑以下“最坏情况”的情况:
...O
../\
.O..O
..../\
...O..O
and so forth.
这是否会使用二分搜索递归关系。 T(n)=T(n/2)+1?
【问题讨论】:
标签:
algorithm
tree
binary-search-tree
【解决方案1】:
我认为你有正确的答案杰。根据问题,我会将树画成如下所示:
> o
> /\
> feature 1: o o
> /\ /\
> feature 2: o o o o
>
...
所以你从一个根值开始。然后您询问电子邮件是否成功满足该功能,因此它分为 2 个节点,Y 或 N。对于 Y(左子树),您询问电子邮件是否满足第二个功能,Y 或 N 和这会分解成另外 2 个节点,并且在 N 侧(右子树)上重复相同的操作。重复所有功能。
我们知道完美二叉树的大欧米茄(最坏情况)是 log(n) [base 2]。所以 log(255) [base 2] 大约是 8,这必须是所需的最大步数。
【解决方案2】:
如果你的树是平衡二叉树,那么答案是 8。
不过,问题的措辞似乎并没有说明这一点。话虽如此,我们可以制作一棵链式树(只有正确的孩子),这会使 255 变得更糟。