什么是计算复杂度的实例(准确地说)?

计算科学 计算物理学 复杂 图论
2021-12-12 06:36:50

我试图理解将一个问题简化为另一个问题的概念。众所周知,这对分类问题的复杂性有巨大的影响。

归约的定义涉及实例的概念。从 wiki 我们读到计算问题可以被视为实例的无限集合以及每个实例的解决方案

我真的不明白这实际上意味着什么。如果我考虑乘法的约简问题

a×b=(a+b)2a2b22
在这种情况下会有什么例子?我特别有兴趣了解什么是可以简化为 SAT-3 问题的问题的实例。

我发现的一个定义是问题的实例是数据的精确规范:例如,“该图包含节点 1、2、3、4、5 和 6,以及带成本的边 (1, 2) 10, (1, 3) with cost 14, ...”如果我们遇到包含图的问题G. 我仍然觉得这不是一个很好的定义。

免责声明:这里不是计算机科学家,只是弦理论家。

2个回答

务实地说,实例仅表示算法的输入/输出对。

我认为减少的一个更好的例子是将乘法转换为重复加法。例如,单乘法“实例”,47, 可以转化为7+(7+(7+7)),加法算法的三个“实例”。减少就是通过将硬实例转换为简单实例,从更简单/已知算法(如加法)中找到组合硬/未知算法(如乘法)的方法。通常有与这种减少相关的成本/增长(在大-O感觉),就像我们必须使用四个加法来完成一次乘法一样。

再举一个例子,考虑对数字列表进行排序。这是一个困难的算法,但我发现了一个减少!我碰巧知道线性搜索算法可以从列表中找到最小的数字(只需遍历它并跟踪迄今为止最大的数字)。给定一个包含 N 个数字的列表,我将使用线性搜索找到最小的一个,将其放入新的输出列表中,将其从输入中删除,然后对剩余的数字重复该过程,直到输入为空。该算法(选择排序)将排序的难题简化为更简单的(多重)线性搜索问题。不幸的是,对长度为 N 的列表进行排序的单个实例需要 N 个线性搜索实例,因此我的整体复杂性确实增加到O(N2).

鉴于您提到了 3-SAT,您可能已经在“NP 完全性”的背景下遇到了减少的概念。这开始转向理论计算机科学,我建议任何关于 3-SAT 的后续问题都指向不同的 stackexchange 站点(https://cstheory.stackexchange.com/

在计算复杂性上下文中考虑问题时,问题的实例只是问题的输入,以与底层计算模型一起使用的方式编码。对于图灵机,您希望您的输入以输入字母表编码Σ, 这可能很简单Σ={0,1}如果您的输入具有二进制编码。然后,(决策)问题只是由问题决定的所有实例的集合(意味着它们返回的输出为 1)。如果我们使用来表示某些输入的编码,那么我们可以将问题定义为语言

POSITIVE-MULT={a,b|a,bR and (a×b)0}

因此,这种语言所代表的问题是针对一些标量输入(a,b),它们的乘法是否产生非负数?现在我们可能有另一种语言(问题)的形式

POSITIVE-ADD={a,b|a,bR and (a+b)0}

所以一个问题可能是,我们可以使用一种算法来决定POSITIVE-ADD解决POSITIVE-MULT? 好吧,我们只是使用您在帖子中所说的减少。即,我们将定义形式的多项式归约

f(a,b)=((a+b)22,(a2+b2)2)

现在很清楚这个案例xPOSITIVE-MULT f(x)POSITIVE-ADD. 这意味着我们有一个减少POSITIVE-MULTPOSITIVE-ADD. 在考虑时你可以做同样的事情3SAT和其他具有挑战性的问题,但其中一些减少可能需要相当多的聪明才智。

有关此材料的不错的介绍性参考,请查看Michael Sipser的计算理论导论。