数据结构的思考

https://mooc.study.163.com/course/1000033001#/info

数据结构和算法是计算机科学非常重要的专业基础课,学了这两门课的意义是什么呢?

算法解决的问题,对于一个问题该怎么解决,没有更快的解决办法,算法究竟有多快,消耗多少资源
抽象数据类型,可以有不同的实现,通过看接口,可以知道这个类型到底有什么功能

  1. 解决一个问题,可以使用不同的数据结构进行描述,而选择的数据结构往往会影响到性能
  2. 性能是非常重要的,不同时间复杂度的算法,所花费的时间是不一样的,专业程序员需要尽可能优化自己的代码,让程序跑的快一点,而且学了一定要用上,这能够体现一个程序员的价值。比如一个程序员实现的算法是 O(N^2), 另外一个程序员实现的是 O(n), 虽然有的时候公司的数据规模不大,但是一旦规模上来了,就能体现程序员的价值了,体现一个程序员的功底
  3. 节省内存,选择一个好的数据结构,还能够节省内存
  4. 计算机专业学生和别的专业不一样,需要看看一个算法是如何实现的,如何将一个问题抽象成计算机问题
  5. 不同的数据结构有不同的适用场景,需要根据场景,选择合适的数据结构
  6. 排序算法:如果有1w个数字以上,那么排序算法的优势就显现了
    冒泡排序:可以适用于数组和链表,而且是稳定的
image.png

冒泡 : 链表 & 数组 都可以用
插入排序:是逆序对的个数如果数据基本有序,那么插入排序简单且高效
堆排序的实际效果可能没有希尔排序(sedgewick增量)的效果好。
归并排序:一般不用来做内部排序,仅仅用来做外部排序
桶排序:O(N) (数字范围有限),比如有400个学生,按照成绩进行排序(成绩在0-100之间)
又如果:有10个数字,数字范围是0-1w,那么桶排序就不那么试用了,你为你要搞1w个桶,不如直接用插入排序快。
又如果:有1w个数字,范围在0-1W之间,而且是十进制的,就可以按照位进行排序。

如果知道数据的特性,那么选择一个更加高效的算法,如果啥都不管,那就用快排好了。
所以说理解业务是非常重要的(如何理解业务呢?)

  • 可以看统计
  • 跟业务沟通

<--------------------------------------------------------------------------------------------------->

  1. 应用 (遇到了一个问题)
  2. 定义
  3. 逻辑结构
  4. 物理结构(如何存储,如何表示的:数组和链表都可以实现List)
  5. 种类
  6. 操作
  7. 速度

你可能感兴趣的:(数据结构的思考)