极客课程-----数据结构与算法

1、为什么要学习数据结构和算法?

 

对全文的看法:

列举大部分现代程序职业人所面临的问题------>直接归因于数据结构和算法基础--->神话算法的万能性

本身就是基础,过分强调神话其功能;

 

愿意投入时间的原因:

a、大公司面试;b、这个是基础-是编程的基石-是内功心法->写出高性能代码的前提;c、知其然,知其所以然

 

学成评判标准:

a、有时间复杂度空间复杂度看问题的意思

b、逻辑思维意思

c、高质量代码

 

2、如何抓住重点,系统高效地学习数据结构与算法?----- 重点+方法

一句话------抓得住重点,用对方法方法

这是一个思维训练过程,更是习惯养成过程

先划重点:

十个数据结构:

数组,链表,堆,栈, 二叉树,队列,散列表,图,trie树,跳表

十个算法:

递归,排序,二分查找,搜索,哈希算法,贪心算法,分治算法,回溯算法,动态规划,字符串匹配

讲方法:

从这几个方面问自己 ------ 来历、自身特点,适合解决的问题,实际的应用场景

总则 ------ 要辩证的思考,多问为什么,不要死记硬背

细则 ------ 边学边练,多问多思考

flag:每篇文字都有我的评论区留言

 

 

03 | 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?------算法性能评价标准(终极目标------多快好省+优雅)

 

前提是假设每一条代码执行的时间一样

代码执行时间随数据规模增长的变化趋势------ 渐进时间复杂度

 

关注执行次数最多的那段代码

加法法则+乘法法则

 

O(n) O(n2) O(n*logn) O(log n)

 

思考题:

一般不进行性能分析,除非是阶段性功能完成了,有时间,需要代码重构,或者出现了问题才会去性能分析;或者为了达到什么样的一个性能目标;一定是要一个驱动力去完成这个动作,不然应该不会考虑进行什么时间空间复杂度分析

 

04 | 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度

 

来历:在查找的过程中,条件终止,差异化的处理耗时

平均:加权平均或者期望平均(算上了出现的概率)---复杂度有量级的差异时才考虑(最好,最坏,平均)

 

摊还分析,平摊分析,均摊分析------均摊等于最好

 

思考题:

应该跟摊还分析的例子是一样的嘛

 

对于清空那个地方还是有点困惑,看了第一条得到了答案,下标指向哪里就代表哪里开始

 

 

05 | 数组:为什么很多编程语言中数组都从0开始编号?

 

数组这种基础数据结构的精髓是什么?随机存取,指定大小------线性(一前一后) 连续空间,相同数据类型

java中有对应的容器

 

数组,链表,队列,栈 都是线性表;非线性 图和树

数组长于------随机访问------移动数组

链表长于------插入删除------遍历

 

数组

两个思考题都没有答上来:

先标记再删除

 

来历:结合内存分配特点而存在

特点:随机访问,插入删除需要移动,或者标记

适合解决的问题:随机访问

实际应用:jvm内存管理

 

 

06 | 链表(上):如何实现LRU缓存淘汰算法?

 

五花八门的链表 ------

单链表:尾节点指向空

双向链表:更常用

循环链表:特点是到头结点方便,如约瑟夫问题

 

 

来历:克服连续空间有限的问题

特点:删除和插入块,但是定位删除和插入点应该也是查询操作;除了不需要连续空间,没有任何优势啊,对比数组来说

适合解决的问题:几乎没什么优势

实际应用:LRU就是一个队列,链表和数组都可以搞定

 

思考题:单链表翻转,^_^

 

07 | 链表(下):如何轻松写出正确的链表代码?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值