算法3:时间复杂度

概念

时间复杂度: 一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n), 它是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。算法中基本运算(最深层循环内的语句)的频度与T(n)同数量级,因此通常采用算法中的基本运算的频度f(n)来分析算法的时间复杂度。因此,算法的时间复杂度记为
T(n) = O(f(n))

void fun(int n) {
  int i = 1;
  while(i <= n)
      i = i*2;
}

思路:找出基础运算 i = i*2 设执行次数为t,则2的t次方<= n, t <= log以2为底的n次,因此时间复杂度为:
image.png
x=2;
while(x<n/2)
x=2*x

思路:基本运算(执行频率最高的语句)为x=2x, 每执行一次x乘2,这里的x又为2,第一次是22,第二次是222, 依次类推,设执行次数为t,则有2的(t+1)次 < n/2,

image.png

int fact(int n) {
  if(n = 1) return 1;
  return n*fact(n-1);
}

思路:这个就是求阶乘n!的递归代码,即n(n-1)......*1, 每次递归调用时fact()的参数减1,递归出口为fact(1), 一共执行n次递归调用fact(), 故T(n) = O(n)

count = 0;
for(k = 1; k <= n; k*=2)
  for(j = 1; j <= n; j++)
      count++;

思路:我们知道嵌套循环的时间复杂度是两个相乘,这里不难理解,在外层的循环中,执行一次,内层就要执行一整个循环,如例题中,k为1的时候,内层循环j 用从1到n。
所以这道题先看内层,j从1到n 时间复杂度就是O(n), 外层 基础运算 k = k*2,设执行次数t,则2的t次方<=n, t <= log以2为底的n次,第一层和第二层时间复杂度相乘


image.png
int func(int n){
  int i = 0, sum = 0;
  while(sum < n) sum += ++i;
  return i;
}

思路: 这里用到了小学知识(其实已经忘了😑)的等差数列之和,从1加到n的和,和=(首项+末项)×项数÷2, 不难看出以上就是从 0+1+2+3+4+...i = (1+i)i/2, 可知道循环次数t满足(1+t)t/2 < n, 因此时间复杂度为:

image.png

void fun(int n){
    int i = 0;
    while(i*i*i*i <= n)
        i++;
}

思路:基本运算为i++,设执行的次数为t次,则ttt <= n, t的三次方<=n

image.png

for( i = n-1; i > 1;i--)
  for(j = 1; j < i; j++)
      if(A[j] > A[j+1])
          A[j] 与 A[j+1] 对换

最后一行语句的频度在最坏情况下是?
思路:这是一个典型的冒泡排序,当n足够大的时候可以忽略常数,所以最坏的情况下:


image.png

以下m++执行的次数是?

int m =0, i, j
for(i = 1; i <= n; j++)
  for(j = 1; j<= 2* i; j++)
      m++

m++语句的执行次数:


image.png
x=0;
while(n>= (x+1)*(x+1))
    x = x+1 

思路:假设第k次循环终止,则第k次执行时,(x+1)的平方 > n, x的初始值为0,第k次判断时,x = k - 1, 即k的平方>n, k > 根号n, 所以:


image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容