4

假设您是派对顾问,并受雇准备和举办公司派对。公司中的每个员工都是 B 树式层次结构的一部分,并被赋予了党级价值。为了防止员工在直接主管在场的情况下受到抑制,主管及其直接员工都不会被邀请。但是,可以邀请任一组。

设计一种算法来生成最大派对等级和的客人列表。

我的解决方案是

  • 主管将包含一个字段,用于直接员工的党职总和

执行自下而上的广度优先搜索以访问树中最低的主管子树。对于每个主管,计算主管党级别与直接雇员总和之间的差异。如果员工党排名总和大于主管排名,所有受影响的员工将被添加到客人列表中。

如果主管和员工排名之间的差异小于或等于零,则向上移动一级并针对下一级子树执行上述比较。

逐级往上,直到分析出公司负责人,并打印出党员总和和宾客名单。

我对运行时间的分析是O(n log n -1)由于

log n-1- 下降到最低子树的时间

n- 最大比较次数

我在一次采访中想到了这个,但不禁觉得我错过了一些东西。我的分析和步骤正确吗?

4

1 回答 1

1

我会以自下而上的方式为层次结构中的每个人计算两个数字:

  1. 如果那个人没有参加,他的及物下属有多少可以参加。
  2. 如果那个人确实参加了,他的及物下属(包括他自己)有多少可以参加。

对于每个人,给定每个直接下属的两个数字,这很容易计算(在 O(B) 时间内,B 是下属的数量)。只需为该人尝试两种方式,并为每个下属使用适当的数字。

因此,通过自下而上的步行,我认为总共需要 O(n) 时间。

于 2013-02-12T20:51:22.793 回答