计算时间复杂度

1.下面函数的复杂度是:

long foo(long x){
    if(x<2) return 1;
        return x*x*foo(x-1);
}

解析:

当n>=2时

foo(n)=n^2*foo(n-1)=n^2*(n-1)^2*foo(n-2)=...=n^2*(n-1)^2*...*2*foo(1);

递归n-1步,时间复杂度为O(n)。

时间: 2024-11-02 16:52:22

计算时间复杂度的相关文章

数据结构与算法-怎样计算时间复杂度

今天我们来谈一下怎样计算时间复杂度. 时间复杂度概念:(百度版) 同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率. 算法分析的目的在于选择合适算法和改进算法. 计算机科学中,算法的时间复杂度是一个函数,它定量描写叙述了该算法的执行时间. 这是一个关于代表算法输入值的字符串的长度的函数.时间复杂度经常使用大O符号表述,不包含这个函数的低阶项和首项系数.使用这样的方式时.时间复杂度可被称为是渐近的.它考察当输入值大小趋近无穷时的情况. 注意:本文承接上一篇<数据结构与算法-

c++性能测试工具:计算时间复杂度

有时候除了测量算法的具体性能指数,我们也会希望测试出算法的时间复杂度,以便我们对待测试的算法的性能有一个更加直观的了解. 测量时间复杂度 google benchmark已经为我们提供了类似的功能,而且使用相当简单. 具体的解释在后面,我们先来看几个例子,我们人为制造几个时间复杂度分别为O(n), O(logn), O(n^n)的测试用例: // 这里都是为了演示而写成的代码,没有什么实际意义 static void bench_N(benchmark::State& state) { int

斐波那契数列计算时间复杂度之彻底分析

#include<stdio.h> #include<time.h> 递归法: 优点:形式简洁,便于人理解 缺点:虽说递归法以空间换时间,但一旦n变大,它的速度的确比非递归法慢得多,例如对n=40,测试递归法所用时间为8~9s;而非递归法只需要远不到1s. 原因是,递归过程中,系统建立堆栈来保存上一层状态信息, 和退栈获取还原系统状态都要有开销的.系统做的事情不少, 所以效率要低. 例如,f(5)的话,实际上会调用这个函数15次,有15个临时栈区,试想f(100)有多吓人...一般

Python 使用timeit模块计算时间复杂度时系统报“invalid syntax”错误

最近在看算法相关的文档 在时间复杂度环节 遇到一个实例: 导入timeit模块后,通过Timer定时器计算两种不同处理方法的时间复杂度 错误代码及报错如下图所示: 仔细查阅 发现from__main__import 不是一个连续的变量 而是由 from+__main__+import 三部分组合而成 将红框中的代码改为绿框中的代码之后 代码可以正确执行 正确结果如下: 原文地址:https://www.cnblogs.com/QianyuQian/p/12084433.html

java 二分查找计算时间复杂度

二分循环遍历数组时, 假设该数组的长度是N那么二分后是N/2,再二分后是N/4--直到二分到1结束(最坏情况), 那么我们设置次数为Y,则表达式: N*(1/2)^Y=1: 经过推算: 既得 Y = Log2N. 曾经和我一样脑残的同学,计算过程可以咨询下其他同学呦.. 原文地址:https://www.cnblogs.com/shuaishuai1993/p/8257063.html

[java] 计算时间复杂度

一.精算: 1.所有的声明,都不计时间: 2.赋值语句占1个时间单位(下称:单位),比如sum=0: 3.return占1个单位,比如,reeturn sum.     我怀疑范围一个链表头,不止占1个单位. 4.1次判断占1个单位,比如for循环里的for(int i=0;i<n;i++)里的每次判断i是否<n,判断1次,就是1个单位耗去. 5.比如总共时间是6N+4,那么我们说这是O(N)级别. 二.粗算 1.for循环的运算时间   =  每次循环所需时间  ×  循环次数: 2.比如:

LeetCode第一题以及时间复杂度的计算

问题描述:给定一组指定整数数组,找出数组中加和等于特定数的两个数. 函数(方法)twoSum返回这两个数的索引,index1必须小于index2. 另外:你可以假设一个数组只有一组解. 一个栗子: Input: numbers={2, 7, 11, 15}, target=9 Output: index1=1, index2=2 算法实现如下: 1 /** 2 * 时间复杂度O(n) 3 * @param array 4 * @param target 5 * @return Map<Integ

算法时间复杂度的计算 [整理]

基本的计算步骤 时间复杂度的定义 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数.记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号 ),简称时间复杂度. 根据定义,可以归纳出基本的计算步骤 1. 计算出基本操作的执行次数T(n) 基本操作即算法中的每条语句(以;号作为分割),语句的执行次数也叫做语

时间复杂度计算

一.概念 时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数) 比如:一般总运算次数表达式类似于这样: a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+f a ! =0时,时间复杂度就是O(2^n); a=0,b<>0 =>O(n^3); a,b=0,c<>0 =>O(n^2)依此类推 eg: (1) for(i=1;i<=n;i++) //循环了n*n次,当然是O(n^2) for(j=1;j<=n;j++) s++; (2