算法的意义与重要性

算法的意义与重要性

  1. 输入、输出、有穷性、确定性、可行性

  2. 如何学习算法

    1. 多看,了解算法有哪些

    2. 《啊哈!算法》书比较厚实

    3. 《数据结构与算法 python 语言描述》

    4. 《数据结果与算法分析 —— C语言描述》

    5. 《数据结构与算法 Python语言实现》

    6. 《算法导论》 对数学有很多证明,体会里面的精髓

    7. 《算法》第四版 使用java描述出,会hello world 就可以看了

    8. 国内剑指Offic

    9. 有关刷题

      • leetCode https://leetcode.com

        ​ https://leetcode.cn.com

      • 牛客网 https://www.nowcoder.com

    算法的意义与重要性

    一、算法基础与基础的数据结构

    二、排序

    三、查找

    四、图

    五、String

    六、算法设计

    七、面试那些事

    时间复杂度与大O表示法

    1. 常见的时间复杂度

      1. 时间复杂度 从低到高 O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
    2. 二分法查找

      1. 二分法就是一种在有序数组中查找某一特定元素的搜索算法。
        1. 时间复杂度 O(log^n)
        2. 最低时间复杂度 O(1)
        3. 平均时间复杂度 O(log^n)
        4. 空间复杂度 O(1)
      2. 二分法 先决条件
        1. 有序数组
        2. 注意数据类型是有范围的 采用 Lt(R-L) / 2 表达式更合适
        3. 注意 Start = md + 1 和 end = md - 1,防止死循环
        4. 数据量不可过大
    3. 数组 Vs 链表

      1. 链表不是连续

        1. 操作 链表 数组
          查找 O(n) O(1)
          在头部插入/删除 O(1) O(n)
          在尾部插入/删除 O(n) O(1)
          在中间插入/删除 O(n) O(n)
      2. 链表插入/删除时间复杂度

        1. 当我们要插入/删除指针当前执行的节点是,时间复杂是O(1)
        2. 当我们要插入/删除某个给定值的节点时候,我们需要遍历链表,所以O(n)
      3. 注意: 插入/删除很少,查询非常多,又不会 out of memory采用数组, 频繁的插入、遍历、查询检索很少就采用链表。

线性表——顺序表——数组

  • 线性表
    • 顺序表
      • 数组
      • 引用数组
      • 动态数组
    • 链表
      • 单链表
      • 双链表
    • 栈 特性: 先进后出
    • 队列 特征:先进后出

初级排序算法

  1. 选择、冒泡、插入、希尔
  • 选择排序
    • 运行时间和输入无关
    • 数据移动是最少的
    • 时间复杂度:O(n^2)
    • 空间复杂度:O(1)
  • 插入排序
    • 数组中每个元素距离它的最终位置都不远。
  • 希尔排序
    • 各个子数组都很短
    • 排序之后子数组都是部分有序的
    • 最优时间复杂度是:O(n)
    • 最坏时间复杂度:O(nlog^2n)
  • 归并算法 又称 冯诺依曼
  • 五大常用算法思想
    • 分法、动态规划、贪心、回溯、分支界定

  1. 比如:公司组织结构、文件系统
    • 数和图的最重要的区分特征是树不存在环路。
    • 节点的度: 一个节点含有的子节点的个数称为该节点的度。
    • 叶节点:(终端节点)节点的度为0
    • 森林:m(m>=0) 棵互不相交的树的集合称为森林。
    • 无序树:树中任意节点的子节点之间没有顺序关系,这种树称为无序树,也称为自由树。
    • 有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树。
  • 二叉树
    • 斜树:所有的节点都只有左子树的二叉树叫左斜树。所有节点都是只有右子树的二叉树叫右斜树。这两个统称为斜树。
    • 满二叉树:除了叶节点外每一个结点都有左右子叶且叶子节点都处在最底层的二叉树。
    • 完全二叉树:若设二叉树的高度为h,除第h层外,其它各层(1 ~ h-1)的结点树都达到最大个数,第h层有叶子节点,并且叶子结点都是从左到右依次排布,这个就是完全二叉树。

你可能感兴趣的:(一通百通感想,算法,数据结构)