生产软件中通用情况下的指数时间算法有多普遍?


11

我知道一般应避免使用指数时间算法,但有时是必须的。一个例子是旅行推销员。这种算法在生产软件中有多普遍?这些情况通常是必要的还是紧急工作的结果?我知道可以通过良好的启发式解决许多问题。那些不能做的人通常会做什么?


1
我的印象是,对于诸如旅行推销员问题之类的事情,人们会减少指数时间算法,而采用更好的启发式方法(对于旅行推销员而言,它们是相当不错的)
soandos 2012年

使用“指数”算法可以解决很多问题。(TSP,CDS,ILP等)。只是指数算法碰巧具有良好的启发式,因此它们可以合理地处理大量实际数据。一个更好的问题也许是,“ 生产软件中的通用案例指数时间算法有多普遍?”
user541686

调整了问题
世界工程师

旅行推销员是n !,不是指数。
user281377

1
@ user281377:它也在O(n ^ 2 2 ^ n)中,所以是的,这是一个指数问题。这也很清楚,因为它可以在poly时间内映射到SAT,这可以在2 ^ n时间内解决-适用于所有NP问题。
拉斐尔

Answers:


7

东西不是制作软件,但做制作软件是正规的验证。大多数客户软件可能不采用此方法,但是它会跟踪嵌入式系统和驱动程序,即对正确性很重要(并且易于处理)的硬件和软件进行跟踪。

那些实际上可计算的验证问题(障碍1)通常是EXPTIME-困难,在更幸运的情况下,您会遇到PSPACE完全问题(障碍2)。这两个类别都(比预期中的)难于NP完全问题,比较起来比较容易。也容易获得双指数问题。

在这些情况下,试探法(就最终结果而言)不会减少它,因为您需要确定的结果。因此,您需要大型机器和时间。有些启发式方法(从替代选择的意义上讲)通常会导致运行时间缩短(例如,在搜索错误状态时进行巧妙的搜索空间探索),但在最坏的情况下,您只能等待。或者,您也可以做纸笔证明,然后由机器检查,这在计算上更简单。



5

编程语言解释器比指数时间差(在输入长度上,即在他们正在解释的程序长度上),并且它们很常见。另一个例子是自动定理证明/约束求解/饱和求解/整数线性规划。还有另一个示例是在Maple / Mathematica中实现的符号微分(尽管如果允许在节点之间共享子表达式,则可以在线性时间内进行符号微分)。


1

让我以旅行商问题为例。我已经做了几次。

有几次我去过一个团队,为旅行商问题写解决方案,但有更多参数。例如,它可能是一家拥有众多技术人员和工程师的商店,每个人都有独特的技能。目的地每天都以服务请求的形式出现。尽管所有程序自最初编写以来都经过了修改和维护,但它们仍在生产中。

这就是他们的工作方式。每个工程师每天都会收到要在手持设备上维修的物品清单。他们完成每项服务任务时,应关闭外壳。剩下的案件将与第二天要安排的案件以更高的优先级排在第二位,因为届时客户会表示不满意。工程师不参加案件的原因有很多。交通问题是最常见的。

它们有多普遍?至少与客户提出的售后服务请求数量一样普遍。例如,如果没有售后服务,留住客户将变得很困难,而获得新客户将变得更加困难。

在许多基于Web的商店(例如Amazon和其他书店)以及其他此类商店经营良好的情况下,我认为旅行推销员比以往更加普遍。而且,教科书中讲授的旅行推销员问题可能有很多变体。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.