最坏情况二进制搜索?

时间:2014-03-16 20:00:36

标签: algorithm tree binary-search-tree

问题是:

  

为了区分普通电子邮件和垃圾邮件,   设计了一种具有多种功能的算法。每个功能都提供   有关消息的信息,例如可疑单词的数量,   消息的长度,与垃圾邮件模板的匹配程度等。每个特征都是具有两个值的离散变量,例如,低/高,短/长,以及相似/不相似。已经使用具有255个节点的树来决定是否拒绝电子邮件。多少个操作/步骤/时间单位   最多需要处理每封电子邮件吗?

我在想这将是一个完美的二叉树,所以2 ^ n - 1 = 255,因此n = 8.但是,我开始考虑以下“最坏情况”情景:

...O
../\
.O..O
..../\
...O..O
and so forth.

这样会使用二进制搜索递归关系。 T(N)= T(N / 2)+1

2 个答案:

答案 0 :(得分:2)

我觉得周杰伦有正确的答案。从这个问题来看,我会把树画成这样:

>                     o
>                    /\
> feature 1:        o  o
>                  /\  /\
> feature 2:      o  o o o
> 
                   ...

所以你从一个根值开始。然后你问这个功能是否已经成功通过电子邮件,所以它分为2个节点,Y或N.对于Y(左子树),你问电子邮件是否符合第二个功能,Y或N和这会断开另外两个节点,同样在N侧重复(右子树)。重复所有功能。

我们知道完美二叉树的大欧米茄(最坏情况)是log(n)[base 2]。因此log(255)[base 2]大约为8,&这必须是所需的最大步骤数。

答案 1 :(得分:0)

如果你的树是一个平衡的二叉树,那么答案就是8。

问题的措辞似乎并没有这样说。所以说,我们可以创建一个链(只有正确的孩子)的树,这将使255更糟糕的情况。