说"算法是准确的"是什么意思?在优化和/或计算机科学方面?我需要一个精确的逻辑/认识论定义。
答案 0 :(得分:5)
Exact
和approximate
算法是解决优化问题的方法。
Exact algorithms
是始终找到给定优化问题的最佳解决方案的算法。
然而,在组合问题或总体优化问题中,传统方法通常不够有效,尤其是当问题搜索区域庞大且复杂时。在其他方法中,我们可以使用启发式方法来解决这些问题。启发式倾向于提供更糟糕的解决方案。这些启发式的子集是approximation algorithms
。
当我们使用approximation algorithms
时,我们可以证明最优解与算法产生的解之间的比率的界限。
E.g。在某些NP-hard
问题中,有一些polynomial-time
近似算法,而最着名的精确算法需要exponential time
。
例如,虽然polynomial-time
有Vertex Cover
近似算法,但最好exact algorithm
(使用记忆)在 O(1.1889n) pp 62-63 中运行。< / p>
答案 1 :(得分:4)
术语 exact 通常用于表示“与近似相反”。近似算法找到了优化问题的微小变化的解决方案,该优化问题允许在某种意义上“接近”最优的溶液,但是仍然是期望的。正如@Sirko在评论中所说,近似值通常是有意义的,因为确切的问题是难以处理或不可判定的,而近似版本则不然。通常,不止一种近似可能是有意义的。
以下是示例:
旅行商问题的精确算法是NP Complete。 TSP将在地图上查找访问N个城市中每个城市的最小长度为L的路线。 NP完整性表示最着名的算法仍然需要时间是N的指数函数。对于某些固定的c,TSP的近似算法找到长度不超过cL的路径。 1.例如,您可以轻松地构建城市的最小生成树,即N中的多项式并围绕树遍历,覆盖每个边两次,以获得针对c = 2的情况的近似算法。隐含的目标是找到常数c的算法尽可能接近一。
用于编译程序的精确算法,在任何给定源代码的最短时间内产生正确的结果 - 在合理的假设下 - 是不可判定的。当然,我们每天都会使用“优化编译器”来提高代码速度,但不能保证真正的最优性。
答案 2 :(得分:2)
在优化中,有两种算法。 完全和近似算法。
精确算法可以精确找到最佳解决方案。
近似算法可以找到接近最佳解决方案。
主要区别在于精确的算法适用于&#34; easy&#34;问题。 是什么造成了问题&#34;容易&#34;是因为它可以在合理的时间内解决,如果问题变大,计算时间也不会成倍增长。这类问题称为 P (确定性多项式时间)。使用精确算法来优化此类的问题。对于其他类问题,首选算法是优选的。