我有5个要解决的数学问题,有30个人将尝试解决每个问题。
我知道每个人能够以多快的速度解决诸如此类的特定问题:
Person1将在5秒内解决问题A,在7分钟内解决B,在20分钟内解决C,在2分钟内解决D。
只有一个人可以同时处理一个问题。
是否有任何算法可以帮助我确定对这些人进行编程的顺序,以便获得最短的golbal
或overall
解决时间?
答案 0 :(得分:0)
算法: https://en.wikipedia.org/wiki/Backtracking
您有一棵有5个级别(问题阶段)的树。这有点像组合。您将尝试每种组合并节省最佳时间。一旦有一次,并且当前组合大于它,您将回溯并尝试通过其中的一些方式进行其他替代丢弃(比如说,丢弃组合树的分支)。
您可以对元素(人员)进行一些预处理,从而提高性能,从而以首先检查最可能的组合的方式对其进行排序。 您可以先为每组候选人安排最佳计时器。回溯的条件之一可能是IsSolvingOtherProblem bool。
您将拥有其他替代方案的最佳最佳解决方案,但这将使您找到所需的解决方案,而且不会花很多时间。