我在理解P和NP减少这个主题时遇到了问题。我理解如果语言L1可以在线性时间内缩减为语言L2而L2在P中,这意味着L1在P中。但是如果我们知道L2具有时间复杂度,比如说theta(n log n),我们可以说L1在O(n log n)中运行?因为从L1到L2的减少是线性时间,L2在θ(n log n)中运行,所以它将是O(n)+ theta(n log n)。而且还可以说L2也可以线性减少到L3,我们可以说L3运行在omega(n log n)?
答案 0 :(得分:1)
tl; dr:是的。是的,如果你的意思是大欧米茄。
第一部分是正确的:如果你可以决定Theta中的L2((n * log(n)))这暗示它可以在O(n * log(n))中完成,你可以将L1减少到L2 O(n),那么你也可以在O(n * log(n))中确定L1与你所做的参数完全一致。 (注意:这不是不意味着,你不可能决定L1少于这个 - 可能有一个算法来解决O(n)中的L1。它只是一个上限...... )
但是,第二部分不正确。如果你可以将L2减少到L3,那么你可以对L3的运行时间一无所知,无论从L2到L3的减少的运行时间是什么。(更新:这只表明L3可能更难,而不是更多L3可能是一个非常难的问题,例如SAT。那么很有可能你可以将L2减少到它,即你可以通过'改述'来解决L2(减少)问题+ SAT求解器 - 仍然是SAT是NP完全的。
如果我们知道L2的复杂性是Theata(n * log(n))(上限和下限,O(n * log(n))和 Omega(n * log(n) )))我们可以在时间O(n)中将L2减少到L3,然后L3至少和L2一样难 - 因为我们知道有无算法可以比Omega更快地解决问题L2 (N *的log(n))。但是,如果L3更快,那就是o(n * log(n)),那么算法'reduction + solve_L3'在O(n)+ o(n * log(n))中运行,它仍然在o中( n * log(n))它解决了L2 - 矛盾。因此,L3必须是Omega(n * log(n))。