Algorithm 贪婪启发式求解分配问题

Algorithm 贪婪启发式求解分配问题,algorithm,kotlin,greedy,Algorithm,Kotlin,Greedy,我正在努力解决这个问题: 佩内洛普是新建超级计算机管理团队的一员。 她的工作是把工作站分配给来这里工作的研究人员 在超级计算机上运行他们的计算。佩内洛普很懒,也很聪明 讨厌为即将到来的研究人员打开机器。她可以解锁 这些机器远离她的办公桌,但并没有感觉到这一点 卑微的工作符合她的条件。她应该决定忽略吗 她可以简单地要求研究人员不要这样做 离开时锁定工作站,然后分配新的 研究人员将研究对象转移到不再使用的工作站上,但这些工作站 仍然没有上锁。这样,她只需要解锁每个工作站 对于第一个使用它的研究人员来

我正在努力解决这个问题:

佩内洛普是新建超级计算机管理团队的一员。 她的工作是把工作站分配给来这里工作的研究人员 在超级计算机上运行他们的计算。佩内洛普很懒,也很聪明 讨厌为即将到来的研究人员打开机器。她可以解锁 这些机器远离她的办公桌,但并没有感觉到这一点 卑微的工作符合她的条件。她应该决定忽略吗 她可以简单地要求研究人员不要这样做 离开时锁定工作站,然后分配新的 研究人员将研究对象转移到不再使用的工作站上,但这些工作站 仍然没有上锁。这样,她只需要解锁每个工作站 对于第一个使用它的研究人员来说,这将是一个巨大的进步 为了佩内洛普

不幸的是,如果发生以下情况,未使用的工作站会自动锁定 它们被闲置的时间超过了一个想法:

  • 让wa、wb两个工作站免费/可用
  • 研究员来了
  • 佩内洛普应指定最接近锁定的工作站(她将锁定机器的可能性降至最低)

  • 计算并行使用的工作站的最大k(O(2nlog(2n)))
  • 按到达时间O(nlog(n))对研究人员进行排序
  • 将每个研究人员分配到其工作站
  • 工作站可以是:锁定、空闲(并将被锁定)、使用

    将工作站置于离锁最近的位置,锁是空闲的

    即:

    min_{w in workstation} w.lockAt 
    such that w.lockAt >= arrival + m
    
    如果没有此类机器,则使用锁定的机器。随便哪个。e、 g最小的锁(方便)

    为了存储机器,一个按lookAt排序的有序集合将允许以o(klog(k))为单位进行维护

    O(max(2nlog(2n),nklog(k)),其中k是工作站的数量

    在我的土豆机O3cpp上,我可以在大约2秒内重复10^9次,所以(非常糟糕)
    一个贪婪的算法根本不起作用。为了简单起见,忽略空闲时间。假设工作站W在某个时间t开始可用。有两名研究人员在时间t到达。爱丽丝需要10分钟,鲍勃需要20分钟。哪一个被分配到W?这取决于下一位研究人员何时到达。如果卡罗尔在t+10到达,给爱丽丝W。如果David在t+20到达,给Bob打W。如果卡罗尔和大卫都到了怎么办?我们要看看谁在他们后面。如果7名研究人员在t+10到达,11名研究人员在t+20到达,他们都需要不同的时间怎么办?谢谢您的反馈。:)前面两种情况已经介绍过了(因为我使用的是treeset,它允许查找最接近给定开始时间的结束时间)。我认为接下来的每一个案例都可以根据这两个案例的逻辑来处理。经过5个多小时的撞击,我认为你是对的:)有没有正确解决这个问题的方法?