对于每个测试用例,显示完成计划所需的最少天数。算法的想法?

时间:2014-03-08 22:05:29

标签: python algorithm python-3.x theory

我必须编写代码来解决这个问题。但首先,我必须为它提出一个算法。我不知道该怎么做。以下是我正在考虑的问题和问题:

  

加拿大航天局(CSA)与他们的竞争   美国和俄罗斯的同行(美国国家航空航天局和Roscosmos,分别是)将第一名男子降落在该地区   火星。他们将计划分解为n个任务,每个任务只需要一天。每个任务都可以   只有在所有先决条件任务完成后才能启动。显然,没有循环依赖   任务之间。 CSA需要您的帮助来确定所需的最少天数   完成计划。

我们得到一个包含每个任务先决条件的列表,因此我知道哪个任务具有哪个先决条件。例如。像[[1,2,3],[],[],[]]这样的列表意味着任务0具有先决条件1,2,3而其他3个任务没有先决条件。

我在想的是检查每个列表并检查它是否是0长度。如果是,则将日计数增加1.如果不是,则迭代先决条件并查看是否可以执行任何操作。如果任何先决条件具有先决条件,我必须先做。

我理解这个理论,我根本不知道如何实现这个。我需要以某种方式跟踪我完成的先决条件,然后从任何将其作为要求的任务中删除这些先决条件。我知道我可以创建一个列表,但如果列表输入文件非常大,则需要很长时间,而且我的算法必须在1秒内返回输入。

任何帮助搞清楚这个算法的人都会非常感激。

1 个答案:

答案 0 :(得分:0)

这是一个非常标准的树/图问题。考虑构建一个将所有独立任务作为叶子的数据结构,并且它们的节点是依赖于它们的任务。然后,您应该能够进行搜索,以计算在树上的水平向上移动时的天数总和。

您的节点可能如下所示:

class node(object):
      def __init__(children)
          self.children = children

      def days_to_complete()
          days = 1
          for child in children:
              days += child.days_to_complete()
          return days

请注意,此课程不考虑交叉依赖关系,但我不会为您解决您的作业;)