Algorithm 政党排名-面试解决方案

Algorithm 政党排名-面试解决方案,algorithm,Algorithm,假设你是一名聚会顾问,被雇来准备和主持公司聚会。公司中的每一位员工都是B-树式层次结构的一部分,并被赋予一个党的等级值。为防止员工在其直接主管在场时受到限制,主管及其直接员工均不受邀请。但是,任何一组都可以被邀请 设计一个算法来产生一个最大的客人名单党排名和 我的解决办法是 主管将包含一个字段,用于直接员工的党级总和 执行自下而上的宽度优先搜索,以访问树中最低的主管子树。对于每个主管,计算主管方职级与直接员工总数之间的差额。如果员工方排名总和大于主管排名,则所有受影响的员工都将添加到客人名单

假设你是一名聚会顾问,被雇来准备和主持公司聚会。公司中的每一位员工都是B-树式层次结构的一部分,并被赋予一个党的等级值。为防止员工在其直接主管在场时受到限制,主管及其直接员工均不受邀请。但是,任何一组都可以被邀请

设计一个算法来产生一个最大的客人名单党排名和

我的解决办法是

  • 主管将包含一个字段,用于直接员工的党级总和
执行自下而上的宽度优先搜索,以访问树中最低的主管子树。对于每个主管,计算主管方职级与直接员工总数之间的差额。如果员工方排名总和大于主管排名,则所有受影响的员工都将添加到客人名单中

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

继续逐级上升,直到公司负责人被分析,并打印出派对排名和客人名单

我对运行时的分析是
O(n log n-1)
,原因是

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

n
-最大比较次数


我在一次面试中想到了这一点,但忍不住觉得自己错过了什么。我的分析和步骤正确吗

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

  • 如果那个人不参加,他有多少过渡性的下属可以参加
  • 如果那个人真的参加了,有多少他的过渡性下属(包括他自己)可以参加
  • 对于每个人来说,考虑到每个直接下属的两个数字(在O(B)时间内,B是下属的#),这很容易计算。只需为该人员尝试两种方法,并为每个下属使用适当的号码


    因此,我认为自下而上的步行总共是O(n)次。

    那么,你的问题是什么?@matthewstrobbridge编辑了这个问题。我在初次提交时重写了一点,最后的过去被删除了。这是一个树上最大加权独立集问题。若你们在互联网上搜索,你们可以用动态规划找到解决方案。