繁体   English   中英

任何算法的时间复杂度都可能随着输入大小的增加而减少,任何一个例子

[英]Is it possible that time complexity of any algorithm decrease as the input size increase, any example

我刚读过Cormen的算法书,认为big-O和big-omega不遵循三分法属性。 这意味着对于两个函数f(n)g(n) ,可能是f(n) = O(g(n))f(n) = Omega(g(n))都不成立的情况。 在示例中,他们认为如果函数是n^(1+sin n) ,那么它是可能的。

虽然它是正确的,但在现实世界算法中有可能具有像sin n这样的运行时间。 因为随着输入大小的增加,它有时会减少。 有没有人知道任何这样的算法,或者可以提供一个小代码片段来做到这一点。

谢谢你的答案,所以在这种情况下假设给定一个大小为n的问题P是正确的,如果它不能通过任何已知的算法在O(f(n))时间内求解,那么P的下界是欧米茄(F(N))。

当字符串搜索变得更长的Boyer-Moore字符串搜索算法变快。 当然,限制因素通常是搜索的字符串的长度。

随着条款与变量的比率增加,随机生成的3CNF子句的SAT平均运行时间最终会下降。 直觉是当相对于变量数量有很多条款时,公式更可能“明显地”不可满足; 也就是说,典型的SAT求解算法(比穷举搜索更好的一步或两步,但足够简单以涵盖在本科逻辑课程中)很快就会遇到矛盾并停止。

当然,这些是对“随机”3CNF公式的一些概念的实验观察。 我不确定人们已经证明了什么。

使用任何反函数。

f(x) -> 1 / x
f(x) -> 1 / x²
f(x) -> 1 / log(x)

随着输入x增长,结果值将变小。 将较小的值与算法中较少数量的步骤相关联是相当简单的。 只需在循环中使用计数器即可移向该数字。

这是一个简单的算法。

function(x) {
    step = 0.001
    y = 1 / x;
    for (i = 0; i < y; i += step) { /* do something awesome here */ }
}

我很难设想一个降低复杂性的有意义的问题。 “有意义”的问题需要阅读或触摸其所有输入的部分内容。 除非输入以非常低效的方式编码,否则处理它应该花费越来越多的时间。

不过,它可能会朝着不变的方向增加。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM