可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题
我们假设计算机运行一行基础代碼需要执行一次运算
那么上面这个方法需要执行 2 次运算
我们把 算法需要执行的运算次数 用 输入大小n 的函数 表示,即 T(n)
此时为了 估算算法需要的运行时间 和 简化算法分析,我们引入时间复杂度的概念
因为f(n) 的增长速度是大于或者等于 T(n) 的,即T(n) = O(f(n))所以我们可以用 f(n) 的增长速度来度量 T(n) 的增长速度,所以我们说这个算法的时间复杂度是 O(f(n))
算法的时间复杂度,用来度量算法的运行时间记作: T(n) = O(f(n))。它表示随着 输入大小n 的增大算法执行需要的时间的增长速度可以用 f(n) 来描述。
那么当我们拿到算法的执行次数函数 T(n) 之后怎么得到算法的时间复杂度呢
综合起来:如果一个算法的执行次数是 T(n),那么只保留最高次项同时忽略最高项的系数后得到函数 f(n),此时算法的时间复杂度就是 O(f(n))为了方便描述,下文稱此为 大O推导法
由此可见,由执行次数 T(n) 得到时间复杂度并不困难很多时候困难的是从算法通过分析和数学运算得到 T(n)。对此提供下列㈣个便利的法则,这些法则都是可以简单推导出来的总结出来以便提高效率。
时间复杂度分析的基本策略是:从内向外分析,从最深层开始分析如果遇到函数调用,要深入函数进行分析
所以该方法的時间复杂度可以表示为 O((5/3)^n),简化后为 O(2^n)
可见这个方法所需的运行时间是以指数的速度增长的。如果大家感兴趣可以试下分别用 1,10100 的输入夶小来测试下算法的运行时间,相信大家会感受到时间复杂度的无穷魅力
可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题
不算,算法不考虑具体实现技術所耗用的额外的运行时间和空间最典型的一个算法是:计算斐波那契数列f(n)=f(n-1)+f(n-2),在递归的情况下空间复杂度是常数但是在c/c++下其实背后耗掉的内存空间是大于O(n)的,但是在其他编译器下可能就真的是常数而算法是很纯粹的,他只考虑自己算法执行时候用来存储他需要或者他產生的数据所耗掉的空间
你对这个回答的评价是?
温馨提醒 如果侵犯了你的权益請通知我们,我们会及时删除侵权内容谢谢合作! 联系信箱: