计算中的不可行性与不可判定性:对软件开发的影响
1. 引言
在软件开发中,算法复杂度理论有时会表明某个问题无法解决,这种情况通常不受欢迎。为了更清楚地理解其实际意义,我们需要探讨计算中“不可能”的各个方面。
首先,要明确“不可能”的具体所指。当讨论问题时,我们常将一般问题和特定实例混为一谈。在探讨“不可能”时,区分这两者很重要,原因如下:
- 特定问题实例总有确定答案。例如,判断两个上下文无关文法是否生成相同语言,虽然一般问题不可判定,但对于任意两个特定文法,答案必然是“是”或“否”。可判定性关注的是在所有可能实例中如何获取答案。
- 对于特定实例,即便有算法解决方案,讨论其求解复杂度也无意义。问题复杂度是输入度量的函数,特定实例输入度量是常数,求解该实例的计算复杂度也是常数。因此,计算复杂度只能反映求解所有实例所需的努力。
其次,计算中的“不可能”有两种类型:
- 不可判定性 :若能证明不存在解决某问题的算法,则该问题不可判定。这与通常因缺乏努力或成功而无法解决问题不同,不可判定性表明无论现在还是未来都不存在解决方案。
- 不可行性 :当问题复杂度过高,解决问题可能需要超出我们可用的时间,但这并不意味着永远无法获得解决方案。例如,输入度量很小时,即使复杂度函数很大,该实例的值可能相对较小。而且,最坏情况复杂度下,非最坏情况实例可能花费更少时间和精力。
最后,某些情况下找到最优解困难,但最优性并非总是必要的。好的解决方案可能完全可以接受,这催生了针对难题的启发式和近似算法。
2. 不可判定性
若能从数学
超级会员免费看
订阅专栏 解锁全文
5万+

被折叠的 条评论
为什么被折叠?



