假设你是一名派对顾问,受雇准备和主持公司派对。公司的每一位员工都是b-树型层级结构的一部分,并被赋予一个政党等级值。为防止员工在其直接主管在场的情况下受到限制,主管及其直接员工均不受邀请。但是,任何一个组都可以被邀请。
设计了一个生成最大方秩和的来宾列表的算法。
我的解决办法是
主管将包含一个字段,用于计算直接雇员的党级总数
执行自下而上的宽度优先搜索以访问树中最低的主管子树。对于每个主管,计算主管党级别与直接雇员总数之间的差异。如果员工方排名总和大于主管排名,则所有受影响的员工都将添加到来宾列表中。
如果主管和员工排名之间的差异小于或等于零,则向上移动一级并对下一级子树执行上述比较。
逐级递升,直至公司负责人分析完毕,打印出党的职级和来宾名单。
我对运行时间的分析是O(n log n -1)因为
log n-1-下降到最低子树的时间
n最大的比较数
我是在一次面试中想到这个的,但忍不住觉得我错过了什么。我的分析和步骤对吗?

最佳答案

我将以自下而上的方式计算层次结构中的每个人的两个数字:
如果那个人没有出席,他有多少过渡性的下属可以出席。
如果那个人真的参加了,那么他的过渡下属(包括他自己)有多少人可以参加。
对于每个人来说,这很容易计算,因为每个直接下属有两个数字(在o(b)时间里,b是下属的)。只需尝试两种方法,并为每个下属使用适当的数字。
所以从下往上走,我认为总共是O(N)时间。

08-18 10:13