数据结构(一) - 绪论
绪论


算法的定义:
对特定问题求解方法和步骤的一种描述,它是指令的有限序列。其中每个指令表示一个或多个操作。
简而言之,算法就是解决问题的方法和步骤
算法的描述:
- 自然语言:英文、中文
- 流程图:传统流程图、NS流程图
- 伪代码:类语言:类C语言
- 程序代码:C语言、JAVA
算法与程序:
- 算法是解决问题的一种方法或一个过程,考虑如何将输入转换成输出,一个问题可以有多种算法。
- 程序使用某种设计语言对算法的具体实现
概念
- 
一个好的算法首先要具备正确性,然后是健壮性、可读性,在几个方面都满足的情况下发,主要考虑算法的效率 
- 
算法的效率以以下两个方面来考虑: - 时间效率: 算法所消耗的时间
- 空间效率: 算法执行过程中所消耗的存储空间
 
- 
算法时间的度量 - 可以依据该算法编制的程序在计算机上执行所消耗的时间来度量
 两种度量方法: - 
事后统计 - 将算法时间,测算其时间和空间的开销
 - 缺点:编写程序实现算法将花费较多的时间和精力;所得实验结果依赖于计算机的软硬件登环境因素,掩盖算法本身的优劣
 
- 
事前分析 - 
对算法所消耗资源的一种估算方法 
- 
算法运行时间 = (每条语句的执行次数 * 该语句执行一次所需要的时间) 所有语句求和 , 又称为语句频度 
- 
每条语句执行一次所需的时间,一般是随机器而异的。取决于机器的指令性能、速度及编译代码的质量。是由机器本身 
 软硬件环境决定的,它与算法无关。
 所以,我们可以假设执行每条语句所需的时间均为单位时间。此时对算法的运行时间的讨论就可转化为讨论该算法中所有
 语句的执行次数,即频度之和了
- 
若由某个辅助函数f(n), 使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。 
 记作T(n)=O(f(n)),称O(f(n))为算法的渐进3时间复杂度(O是数量级的符号),简称时间复杂度 n 越大算法的执行时间越长 - 排序:n为记录数
- 矩阵:n为矩阵的阶数
- 多项式:n为多项式的系数
- 集合:n为元素的个数
- 树: n为树的结点的个数
- 图:n为图的顶点数与边数
 
 
- 
 
- 
算法时间复杂度的定义 
 算法中基本语句重复执行的次数是问题规模n的某个函数f(n),算法的时间度量记作:T(n)=O(f(n))
 它表示随着n的增大,算法执行的时间的增长率和f(n)的增长率相同,称渐进时间复杂度
分析算法时间复杂度的基本方法

忽略所有低次幂项和最高次幂系数,体现增长率的含义
方法:
- 
找出语句频度最大的那条语句作为基本语句 
- 
计算基本语句的频度得到问题规模n的某个函数f(n) 
- 
取其数量级用符号"O"表示 
- 
有些情况下,算法中基本操作重复执行的次数还随问题的输入数据集不同而不同 
 例如:在数组中,顺序查找某个元素,返回其所在的位置。- 最好情况是1次
- 最坏情况n次
- 平均时间复杂度:O(n)
 
算法时间效率的比较:

渐进空间复杂度
- 
空间复杂度:算法所需存储空间的度量,记作:S(n) = O(f(n)),其中n为问题的规模(或大小) 
- 
算法主要占据的空间 
 -- 算法本身要占据的空间,输入/输出,指令,常数,变量登
 -- 算法要使用的辅助空间列如:将数组逆序排列有不同的算法 
    //空间复杂度:S(n) = O(1)
    public static int[] rever(int[] arr) {
        int n = arr.length;
        int t = 0;
        for (int i = 0; i < n / 2; i++) {
            // 后面的元素
            t = arr[n - i - 1];
            arr[n - i - 1] = arr[i];
            arr[i] = t;
        }
        return arr;
    }
    
    //空间复杂度S(n)=O(n)
    public static int[] rever2(int[] arr) {
        int[] tmp = new int[4];
        int n = arr.length;
        for (int i = 0; i < n; i++) {
            tmp[i] = arr[n - i - 1];
        }
        for (int i = 0; i < n; i++) {
            arr[i] = tmp[i];
        }
        return arr;
    }
本文内容引自青岛大学 王卓老师的讲课内容
本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/16027962.html

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号