我知道一般应避免使用指数时间算法,但有时是必须的。一个例子是旅行推销员。这种算法在生产软件中有多普遍?这些情况通常是必要的还是紧急工作的结果?我知道可以通过良好的启发式解决许多问题。那些不能做的人通常会做什么?
我知道一般应避免使用指数时间算法,但有时是必须的。一个例子是旅行推销员。这种算法在生产软件中有多普遍?这些情况通常是必要的还是紧急工作的结果?我知道可以通过良好的启发式解决许多问题。那些不能做的人通常会做什么?
Answers:
东西不是在制作软件,但做对制作软件是正规的验证。大多数客户软件可能不采用此方法,但是它会跟踪嵌入式系统和驱动程序,即对正确性很重要(并且易于处理)的硬件和软件进行跟踪。
那些实际上可计算的验证问题(障碍1)通常是EXPTIME-困难,在更幸运的情况下,您会遇到PSPACE完全问题(障碍2)。这两个类别都(比预期中的)难于NP完全问题,比较起来比较容易。也容易获得双指数问题。
在这些情况下,试探法(就最终结果而言)不会减少它,因为您需要确定的结果。因此,您需要大型机器和时间。有些启发式方法(从替代选择的意义上讲)通常会导致运行时间缩短(例如,在搜索错误状态时进行巧妙的搜索空间探索),但在最坏的情况下,您只能等待。或者,您也可以做纸笔证明,然后由机器检查,这在计算上更简单。
让我以旅行商问题为例。我已经做了几次。
有几次我去过一个团队,为旅行商问题写解决方案,但有更多参数。例如,它可能是一家拥有众多技术人员和工程师的商店,每个人都有独特的技能。目的地每天都以服务请求的形式出现。尽管所有程序自最初编写以来都经过了修改和维护,但它们仍在生产中。
这就是他们的工作方式。每个工程师每天都会收到要在手持设备上维修的物品清单。他们完成每项服务任务时,应关闭外壳。剩下的案件将与第二天要安排的案件以更高的优先级排在第二位,因为届时客户会表示不满意。工程师不参加案件的原因有很多。交通问题是最常见的。
它们有多普遍?至少与客户提出的售后服务请求数量一样普遍。例如,如果没有售后服务,留住客户将变得很困难,而获得新客户将变得更加困难。
在许多基于Web的商店(例如Amazon和其他书店)以及其他此类商店经营良好的情况下,我认为旅行推销员比以往更加普遍。而且,教科书中讲授的旅行推销员问题可能有很多变体。