党的等级 - 面试解决方案

时间:2013-02-12 20:30:14

标签: algorithm

假设您是一名派对顾问,并被聘请准备和举办公司派对。公司中的每个员工都是B树样式层次结构的一部分,并且被赋予了党的等级值。为了防止员工在直接主管面前受到抑制,主管和直接员工都不会被邀请。但是,可以邀请任何一个小组。

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

我的解决方案是

  • 主管将包含直接雇员的政党职级总和字段

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

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

逐级继续,直到分析公司负责人,并打印出党员排名和客人名单。

由于

,我对运行时间的分析为O(n log n -1)

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

n - 最大比较次数

我在接受采访时想到了这一点,但我忍不住感到我错过了什么。我对分析和步骤是否正确?

1 个答案:

答案 0 :(得分:1)

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

  1. 如果那个人没有参加,他的过渡下属中有多少人可以参加。
  2. 如果那个人参加了DID,那么他的过渡下属(包括他自己)中有多少人可以参加。
  3. 对于每个人,这很容易计算,给定每个直接下属的两个数字(在O(B)时间,其中B是下属的#)。只需为这个人尝试两种方式,并为每个下属使用适当的数字。

    因此,自下而上行走时,我认为总共有O(n)时间。