algorithm - 与 O 表示法的算法比较
问题描述
我们考虑解决相同问题的两种算法,Algo1 和 Algo2。对于任何大小为n的输入,Algo1 需要时间T_1(n)
,而 Algo2 需要时间T_2(n)
。
假设T_1(n)
在O(n^2)
和T_2(n)
中完成O(n^3)
。这是否意味着存在n0使得对于n > n0*
大小的输入,Algo1 的运行速度比 Algo2 快n
?
抱歉,我对这个主题很陌生,我不知道如何开始解决这个问题。任何朝着正确方向的提示将不胜感激!谢谢!
解决方案
作为一个反例,这里有两种在 JavaScript 中计算整数平方的算法。
算法1:
console.log( Algorithm1( 5 ) ); // 25
function Algorithm1 ( n ) {
let count = 0;
for ( let i = 0; i < n; i++ )
for ( let j = 0; j < n; j++ )
count++;
return count;
}
算法2:
console.log( Algorithm2( 5 ) ); // 25
function Algorithm2 ( n ) {
return n*n;
}
算法 1 在 中Ө(n²)
,因此不在O(1)
.
算法 2 在 中O(1)
,因此也很简单O(n³)
。
因此n0
,对于算法 1,不存在n > n0
比算法 2 更快的情况。
推荐阅读
- ios - 找不到“EXUpdates/EXUpdatesAppController.h”文件
- github - github问题上的红色/绿色感叹号图标是什么意思?
- docker - 启动 Mayan 时出错“没有名为 'sqlalchemy' 的模块”
- c# - 使用 C#、.net 和 TFS 进行自动化测试的可执行文件
- javascript - 在javascript中测试获取请求
- algorithm - 在 O(n) 中创建二叉树
- visual-studio-code - 如何在 VSCode Windows 中为 Jasmine/量角器代码启用语法突出显示?
- python - groupby 有多个条件
- python - 如何矢量化每一行和一个列表的交集并找到那些非空的?
- flutter - 颤动中的分页是否有任何替代方法?