【问题标题】:Classroom Scheduling Using Graph Algorithm使用图算法的课堂调度
【发布时间】:2016-01-22 12:17:37
【问题描述】:

这是我过去期中的另一个问题,我应该给出一个正式的表述,描述所使用的算法,并证明其正确性。问题来了:

大学正在尝试安排 n 个不同的课程。每个班级都有开始和结束时间。所有课程都必须在星期五上课。只有两个教室可用。

帮助大学决定是否可以在不引起任何时间冲突的情况下安排这些课程(即在同一个教室安排两个课程时间重叠的课程)。

【问题讨论】:

  • 所以我们应该帮助你在期中作弊?
  • @Gene 不,期中考试已经发生了。我无法回答这个问题,我想知道如何解决这个问题以备日后使用。

标签: graph breadth-first-search depth-first-search bipartite


【解决方案1】:

这确实是一个二分/双色问题。

将每个类想象成图的一个节点。现在在 2 个节点之间创建一条边,如果它们有时间重叠。现在,如果您可以将此图双色,那么您将获得最终的图表,那么就可以安排所有课程。否则不行。

如果你创建的图形可以是双色的,那么每个“黑色”节点将属于房间 1,每个“白色”节点将属于房间 2

【讨论】:

    【解决方案2】:

    这不是二分图解决方案的问题。谁告诉你的?

    @Beta 几乎是正确的。创建对 <START, time><END, time> 的列表。每个类在列表中有两对,一个 START 和一个 END。

    现在按时间对列表进行排序。或者,如果您愿意,可以将它们放在一个最小堆中,这相当于堆排序。对于相同的时间,将 END 三元组放在 START 之前。然后执行以下循环:

    set N = 0
    while sorted list not empty
      pop <tag, time> from the head of the list
      if tag == START
        N = N + 1
        if N > 2 return "can't schedule"
      else // tag == END
        N = N - 1
      end
    end
    return "can schedule"
    

    您可以轻松地稍微丰富算法以返回超过 2 个类同时处于会话中的时间段,返回这些类和其他有用信息。

    【讨论】:

      【解决方案3】:

      按开始时间(O(nlogn))对班级进行排序,然后按顺序(O(n))进行排序,注意开始和结束时间并寻找两个以上班级同时进行的情况.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-12
        • 2011-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多