啃书之数据结构与算法分析(一):数学基础与运行时间的计算

2023-03-19  本文已影响0人  南风知我咦

最近看是看买了好久好久的数,名字叫做《数据结构与算法分析》

数学基础

定义一
定义二
定义三
定义四

定义解释

  1. 第一个T(N) = O(f(N))的定义是说T(N)的增长率小于等于f(N);
  2. 第二个T(N) = Ω(f(N))定义是T(N)的增长率大于或等于g(N);
  3. 第三个T(N) = Θ(h(N))定义是T(N)的增长率等于h(N);
  4. 第四个T(N) = o(p(N))定义是T(N)的增长率小于p(N),这个不同于大O,因为大O包含增长率相同的情形;
重要结论:
法则一
法则二
法则三

特别注意

  1. 极限是0,那么f(N) = O(g(N))
  2. 极限是c!=0,那么f(N) = Θ(g(N))
  3. 极限是∞,那么f(N) = Ω(g(N))
  4. 摇摆不定,不考虑,计算时间复杂度不会出现这种情况。

小总结

模型

要分析的问题

运行时间计算(感觉这个比较重要)

简单的栗子

//下面是一个求和公式,哈哈,虽然有点抽象,但是我只能做到这么多了;就是求i³的和,i ∈[1,n];
     N
    Σ i³
    i=1
//求和算法
public static int sum(int n){   
    int sum;
    sum = 0;                                     //1
    for(int i = 1;i<=n;i++){                 //2
          sum+= i * i * i;                         //3
    }
    return sum;                                //4
}

一般法则

法则一:for循环
法则二:嵌套的for循环
//就不写完整了
for(int i =0;i<n;i++){
    for(int j =0;j<n;j++){
        k++;
    }
}
法则三:顺序语句
for(int i = 0;i<n;i++){
    sum++; 
}
for(int j = 0;j<n;j++){
    for(int k = 0;k<n;k++){
        sum++;
    }
}
法则四:if/else语句
 if(condition)
    S1
 else
    S2
其他
//其实就是一个for循环的工作,所以运行时间为O(N)
public static long fac(int n){
    if(n <= 1){
       return 1;
    }else{
       return n*fac(n-1);
    }
}
public static long fib(int n){
    if(n<=1) return 1;
    else return fib(n-1) + fib(n-2);
}
T(N) = T(N-1) + T(N-2) + 2
emmm,我逃课了?前面的数学相关的知识看得不仔细,这里用到了前面的理论和结论,我看不懂了。
补充下前面的数据证明
//作为栗子,我们证明斐波那契数,F0 = 1,F1 = 1,F2=2,F3=3,F4=5,....Fi= Fi-1 + Fi-2,满足对i>=1,有Fi<(5/3)i次幂。
//首先确定基准情形,容易验证F1 = 1< 5/3 ; F2 = 2 < 25/9 ,这就证明了基准情形
//假设定理对于i=1,2....k成立,这就是归纳假设。为了证明定理,我们需要证明Fk+1 < (5/3)k+1次幂.
//根据定义得到Fk+1 = Fk + Fk-1
//下面的k要么是下标,要么是次幂
//Fk+1 = (5/3)k + (5/3)k-1
//(5/3)k + (5/3)k-1 = (3/5)(5/3)k+1 + (3/5)²(5/3)k+1 = (15/25 + 9/25)(5/3)k+1  = 24/25 * (5/3)k+1 < (5/3)k+1
//Fk+1 < (5/3)k+1
//所以就证明了(斐波那契数,F0 = 1,F1 = 1,F2=2,F3=3,F4=5,....Fi= Fi-1 + Fi-2,满足对i>=1,有Fi<(5/3)i次幂。)
最大子序列和问题的求解

加油!

上一篇 下一篇

猜你喜欢

热点阅读