假设您是一名派对顾问,并被聘请准备和举办公司派对。公司中的每个员工都是B树样式层次结构的一部分,并且被赋予了党的等级值。为了防止员工在直接主管面前受到抑制,主管和直接员工都不会被邀请。但是,可以邀请任何一个小组。
设计一种算法来生成最大一方等级和的客人列表。
我的解决方案是
执行自下而上的广度优先搜索以访问树中最低的超级用户子树。对于每个主管,计算主管方等级与直接雇员总和之间的差异。如果员工方的排名总和大于主管排名,则所有受影响的员工都将被添加到访客列表中。
如果主管和员工排名之间的差异小于或等于零,则向上移动一级并执行上述下一级子树的比较。
逐级继续,直到分析公司负责人,并打印出党员排名和客人名单。
由于
,我对运行时间的分析为O(n log n -1)
log n-1
- 下降到最低子树的时间
n
- 最大比较次数
我在接受采访时想到了这一点,但我忍不住感到我错过了什么。我对分析和步骤是否正确?
答案 0 :(得分:1)
我会以自下而上的方式为层次结构中的每个人计算两个数字:
对于每个人,这很容易计算,给定每个直接下属的两个数字(在O(B)时间,其中B是下属的#)。只需为这个人尝试两种方式,并为每个下属使用适当的数字。
因此,自下而上行走时,我认为总共有O(n)时间。