![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法之美读书笔记
文章平均质量分 60
伦敦看日出
O Captain! My Captain!
展开
-
链表(上):如何实现LRU缓存淘汰算法
缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非常广泛的应用,比如常见的CPU缓存、数据库缓存、浏览器缓存等等。缓存的大小有限,当缓存被用满时,哪些数据应该被清理出去,哪些数据应该被保留?这就需要缓存淘汰策略来决定。常见的策略有三种:先进先出策略FIFO(First In,First Out)、最少使用策略LFU(Least Frequently Used)、最近最少使用策略LRU(Least Recently Used)。开篇问题:如何用链表来实现LRU缓存淘汰策略?数组..原创 2022-04-13 20:31:23 · 271 阅读 · 1 评论 -
数组:为什么很多编程语言中数组都从0开始编号
为什么数组要从0开始编号,而不是从1开始呢?如何实现随机访问?数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。线性表(Linear List)。顾名思义,线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。非线性表,比如二叉树、堆、图等。之所以叫非线性,是因为,在非线性表中,数据之间并不是简单的前后关系。第二个是连续的内存空间和相同类型的数据。拿一个长度为10的int类.原创 2022-04-12 15:26:26 · 404 阅读 · 0 评论 -
复杂度分析
复杂度分析是整个算法学习的精髓,只要掌握了它,数据结构和算法的内容基本上就掌握了一半。为什么需要复杂度分析?事后统计法 :把代码跑一遍,通过统计、监控,得到算法执行的时间和占用的内存大小这种评估算法执行效率的方法是正确的 , 但是,这种统计方法有非常大的局限性。1. 测试结果非常依赖测试环境2.测试结果受数据规模的影响很大不用具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法。大O复杂度表示法时间复杂度分析1.只关注循环执行次数最多的一段代码我们在分析一个算法、一段代码的时间复杂原创 2022-04-10 22:46:05 · 395 阅读 · 1 评论 -
如何抓住重点,系统高效地学习数据结构与算法
学不好数据结构与算法的原因:没有找到好的学习方法,没有抓住学习的重点数据结构是为算法服务的,算法要作用在特定的数据结构之上。想要学习数据结构与算法,首先要掌握一个数据结构与算法中最重要的概念——复杂度分析。20个最常用的、最基础数据结构与算法,不管是应付面试还是工作需要,只要集中精力逐一攻克这20个知识点就足够了。这里面有10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树;10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹原创 2022-04-09 20:06:19 · 757 阅读 · 1 评论 -
读书笔记1:每日一更
开篇词讲最重要的就是基础足够扎实当面临行业变动、新技术更迭的时候,我们可以发现,那些所谓的新技术,核心和本质的东西其实就是当初学的那些知识。掌握了这个“规律”,学任何东西都很快,任何新技术都能快速迎头赶上。这就是快速学习并且获得成功的秘诀。基础知识就像是一座大楼的地基,它决定了我们的技术高度。而要想快速做出点事情,前提条件一定是基础能力过硬,“内功”要到位。需要修炼的“内功”:大学里的那些基础课程,操作系统、计算机网络、编译原理,数据结构和算法。专栏分成四个递进的模块1:入门篇时间、空间原创 2022-04-08 20:41:19 · 516 阅读 · 1 评论