zoukankan      html  css  js  c++  java
  • 算法基础

         从大一学编程起,就对算法很是敬畏,大二开的算法课,老师也只是照着书念念,当时也是刚对编程入门吧,基本语法和程序组织结构才刚刚清楚那种,所以除了基本几样查找算法,其他的基本没学~~~学渣不仅学的晚,还学的慢。也不得不吐槽下,祖国母亲的应试教育真是.....高中弄的也是没得时间来捣鼓电脑,更别谈接触编程了=、=,基本每周就一次玩电脑的机会,干嘛?打dota啊!

         吐糟完毕,我还是希望以后孩子们能早点接触编程,早点好啊。好多概率和原理真的是要时间来发酵,长期积累的知识多了,就会有顿悟的那一天,那一天越早越好....

    从概念开始,语句频度:是指该语句重复执行的次数。一个算法的时间耗费就是该算法中所有语句频度

                                             语句频度
    (1)for (i = 0; i < n; i++){              n+1
    (2)  for(j = 0; j < n; j++){             n(n + 1)
    (3)    a++;                              n*n
    (4)    for(k = 0; k < n; k++){           n*n*(n + 1)
    (5)      c++;                            n*n*n
            }
          }
        }

    [分析]:语句(1)中 i 从0到n,i = n时才终止执行,所以一共执行过n+1次,同时它下面的循环体执行了n次。

    语句(2)本身循环n+1次,同时作为语句(1)的循环体也执行了n次。

    语句(3)作为前两个语句的循环体,易知执行了n*n次。

    语句(4)同理,本身多出k = n那次,一共执行了n*n*(n+1)次。

    语句(5)三个循环体下面,执行了n*n*n次。

    所以频度之和:f(n) = (n+1) + n(n+1) + n*n + n*n*(n+1) + n*n*n。 

    算法的时间复杂度

    T(n) = O(f(n))

    对于算法分析,关心的是算法中语句总的执行次数f(n),分析f(n)随n的变化情况并确定T(n)的数量级。O表示数量级。上面的例子中,T(n)与n的立方数量级相同,O(n立方)是该算法的渐近时间复杂度。

    也就是,对于时间复杂度,我们不必算出一个准确的值,我们只要确定它的最高数量级,就能估算出这个算法的好坏。当然,对于T(n1)=100*n*n,T(n2)=50*n*n*n,n=20是个临界点。所以根据算法的可读性,健壮性,时间复杂的高低,问题规模大小来综合权衡,选出合适的算法才是正解。

    写不动了。。tag下~

    算法的空间复杂度

    这个比较简单,例如将数组倒序存储的两种算法。

    /* */
    for(int i=0; i< n; i++){
      b[i] = a[n-i-1];
    }
    for(int i=0; i<n; i++){
      a[i] = b[i];
    }

    这个算法用到一个辅助数组b[ ],空间复杂度为O(n)

    /* */
    for(int i=0; i< n/2; i++){
      t = a[i];
      a[i] = a[n-i-1];
      a[n-i-1] = t;
    }
    
    

    这个算法只用到一个变量t,空间复杂度为O(1)

  • 相关阅读:
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯VIP基础练习 矩形面积交
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    核心思想:想清楚自己创业的目的(如果你没有自信提供一种更好的产品或服务,那就别做了,比如IM 电商 搜索)
    在Linux中如何利用backtrace信息解决问题
  • 原文地址:https://www.cnblogs.com/lovecc/p/4603915.html
Copyright © 2011-2022 走看看