算法一:算法概述

算法一:算法概述

    • 1. 什么是算法?
      • 1.1 算法定义
      • 1.2 算法的特点
      • 1.3 衡量算法标准
      • 1.4算法的应用领域
    • 2. 什么是数据结构?
      • 2.1 数据结构定义
      • 2.2 数据结构的组成方式
        • 2.2.1 线性结构
        • 2.2.2 树
        • 2.2.3 图
        • 2.2.4 其他数据结构
    • 3. 时间复杂度
      • 3.1 时间复杂度定义
      • 3.2 时间复杂度的原则
      • 3.3 时间复杂度的场景
        • 3.3.1 O(n)
        • 3.3.2 O( l o g n logn logn)
        • 3.3.3 O(1)
        • 3.3.4 O( n 2 n^2 n2)
        • 3.3.5 场景比较
        • 3.3.6 其他场景
    • 4. 空间复杂度
      • 4.1 空间复杂度定义
      • 4.2 空间复杂度情形
        • 4.2.1 常量空间
        • 4.2.2 线性空间
        • 4.2.3 二维空间
        • 4.2.4 递归空间

1. 什么是算法?

  • 1.1 算法定义

    • algorithm):本质是一系列程序指令,用于解决特定的运算和逻辑问题
  • 1.2 算法的特点

    • 算法有简单的,也有复杂的
    • 算法有高效的,也有拙劣的
  • 1.3 衡量算法标准

    • 时间复杂度
    • 空间复杂度
  • 1.4算法的应用领域

    • 运算
    • 查找
    • 排序
    • 最优决策

2. 什么是数据结构?

  • 2.1 数据结构定义

    • data structure):是数据的组织、管理和存储格式,其使用目的是为了高效地访问和修改数据
  • 2.2 数据结构的组成方式

    • 2.2.1 线性结构

      • 最简单的数据结构
      • 数组、链表
      • 延伸(栈、队列、哈希表)
        算法一:算法概述_第1张图片
    • 2.2.2 树

      • 相对复杂的数据结构
      • 二叉树
      • 延伸(二叉堆)
        算法一:算法概述_第2张图片
    • 2.2.3 图

      • 更为复杂的数据结构
      • 多对多的关联关系
        算法一:算法概述_第3张图片
    • 2.2.4 其他数据结构

      • 由基本数据结构变形而来
      • 跳表、哈希链表、位图

3. 时间复杂度

  • 3.1 时间复杂度定义

    • 若存在函数f(n),使得当n趋近于无穷大时,T(n)/f(n) 的极限值为不等于零的常数,则称 f(n)T(n) 的同数量级函数。
    • 记作 T(n)=O(f(n)),称为O(f(n))O为算法的渐进时间复杂度
    • 别称:大O表示法
  • 3.2 时间复杂度的原则

    • 如果运行时间是常数量级,则用常数1表示
    • 只保留时间函数中的最高阶项
    • 如果最高阶项存在,则省去最高项前面的系数
  • 3.3 时间复杂度的场景

    • 3.3.1 O(n)

      • T(n) = 3n
      • 最高阶项为3n,省去系数3,则转为T(n)=O(n)
        算法一:算法概述_第4张图片
    • 3.3.2 O( l o g n logn logn)

      • T(n) = 5 l o g n logn logn
      • 最高阶项为5 l o g n logn logn,省去系数5,则转为T(n)=O( l o g n logn logn)
        算法一:算法概述_第5张图片
    • 3.3.3 O(1)

      • T(n) = 2
      • 只有常数量级,则转为T(n)=O(1)
        算法一:算法概述_第6张图片
    • 3.3.4 O( n 2 n^2 n2)

      • T(n) = 0.5 n 2 n^2 n2 + 0.5n
      • 最高阶项为0.5 n 2 n^2 n2,省去系数0.5,则转为T(n)=O( n 2 n^2 n2)
        算法一:算法概述_第7张图片
    • 3.3.5 场景比较

      • O(1) < O( l o g n logn logn) < O(n) < O( n 2 n^2 n2)
    • 3.3.6 其他场景

      • O(n l o g n logn logn)
      • O( n 3 n^3 n3)
      • O(mn)
      • O( 2 n 2^n 2n)
      • O(n!)

4. 空间复杂度

  • 4.1 空间复杂度定义

    • space complexity:对一个算法在运行过程中临时占用存储空间大小的量度
    • 使用大O表示法
    • S(n)=O(f(n))n为问题的规模,f(n) 为算法所占存储空间的函数
  • 4.2 空间复杂度情形

    • 4.2.1 常量空间

      • 算法的存储空间大小固定,和输入规模没有直接的关系
      • O(1)
      void fun1(int n) {
      	int var = 3;
      	...
      }
      
    • 4.2.2 线性空间

      • 算法分配的空间是一个线性的集合(如数组),并且集合大小和输入规模n成正比时
      • O(n)
      void fun2(int n) {
      	int[] arr = new int[n];
      	...
      }
      
    • 4.2.3 二维空间

      • 算法分配的空间是一个二维数组集合,并且集合的长度和宽度都与输入规模n成正比时
      • O( n 2 n^2 n2)
      void fun3(int n) {
      	int[][] matria = new int[n][n];
      	...
      }
      
    • 4.2.4 递归空间

      • 递归会专门分配一块内存,存储方法调用栈
      • O(n)
      • 方法调用栈
        • 进栈:当进入一个新方法时,执行入栈操作,把调用的方法和参数信息压入栈中
        • 出栈:当方法返回时,执行出栈操作,把调用的方法和参数信息中栈中弹出
      void fun4(int n) {
      	if(n<=1) {
      		return;
      	}
      	fun4(n-1);
      	...
      } 
      

你可能感兴趣的:(算法,算法)