算法与数据结构的介绍

数据结构和算法
  • CMDB项目 (****)
  • 数据分析
  • 数据结构和算法 (****)
数据结构和算法地位:
  • 操作系统
  • 计算机组成原理
  • 网络系统
  • 软件工程
  • 数据结构和算法 (考研必考)

数据结构和算法是计算结科学领域非常核心的一门课程。
程序 = 数据结构 + 算法

学习时长
  • 算法
    • 排序算法
      • 冒泡排序 (**)
      • 选择排序
      • 插入排序
      • 快速排序 (**)
      • 希尔排序
      • 计数排序
    • 查找
      • 顺序查找
      • 二分查找 (**)
  • 数据结构
    • 线性结构
      • 数组 (列表)
      • 链表 (约瑟夫,丢手绢问题)
      • 线性结构的应用
        • 队列
    • 非线性结构
        • 一般树
          • B+树
        • 二叉树
          • 完全二叉树
          • 满二叉树
        • 森林
        • mysql的索引:B+树 不是二叉树
        • 图论

总结:这两天的内容,你学完之后,做出有用的东西。主要学习的是思考的问题的方式,方法。就像练功的人练内功一样。内功不好 ,学其他的东西非常的费劲。如果听不懂的话,很正常。但是大家千万不要放弃,每天要不断的去思考,说不定哪一天就像明白了。

算法衡量的标准

1.时间复杂度,重点

问: 比如说,现在有两个程序,这两个程序的运行时间如何衡量?
答:用time模块判断,time.time() 来进行计算

上述的计算方式,前提是:两段程序必须运行在同一个硬件相同(CPU,内存)的环境下运行,才有意义。

因此,我们使用时间差的方式来衡量一个程序是否快慢没有任何的意义。所以,使用程序执行的大概次数来衡量程序的执行快慢,把这种衡量的方式称之为时间复杂度,使用O()来记

如何一眼判断时间复杂度?

  • 循环减半的过程?O(logn)
  • 几次循环就是n的几次方的复杂度

2.空间复杂度

这段程序运行的过程中,是否占用了内存空间。
微博,用redis。196G内存

常见的排序算法
  • 算法
    • 排序算法
      • 冒泡排序 (**)
      • 选择排序
      • 插入排序
      • 快速排序 (**)
      • 希尔排序
      • 桶排序 ---》 计数排序
      • 动态规划 贪心(分糖果,人民币问题) 背包问题
    • 查找
      • 顺序查找
      • 二分查找 (**)

博客地址:

http://lupython.gitee.io/
https://visualgo.net/zh

数据结构
  • 线性结构

    就是能够用一根线串起来的数据结构

    • 数组 (列表)
      • 问:申请数组的前提条件是啥? a[12]?内存需要满足的条件?
      • 答:内存必须有一块连续的内存空间
      • int a[7] : 声明一个数组,这个数组的数组名是 a, 数组的大小是 7, 数组元素的类型是整型。 int a[7] = array(1,2,3,4,5,6,7)
      • 问:如何申请内存?
      • 答:C,C++语言,申请:mallco (28)。释放:free(28)
      • 问:int a[7] = [1,2,3,4,5,6,7] a[3] = 4?
      • 答:a[3] = 首地址(1000) + 索引(3) * 类型长度(4) = 1012 --- 1015
      • 问:数组首地址从哪获取?
      • 答:数组首地址保存在数组名中
      • 列表中的增(append)删(pop)改(update)查(for)
    • 链表 (约瑟夫,丢手绢问题)
    • 线性结构的应用
      • 队列
  • 非线性结构

      • 一般树
        • B+树
      • 二叉树
        • 完全二叉树
        • 满二叉树
      • 森林

相关推荐