
数据结构与算法之美
Jackeys007
开朗、活泼,一个逗比的程序员
展开
-
day05数据结构与算法之美(上,如何实现LRU缓存淘汰算法)
一、解答开篇 维护一个有序单链表,越靠近链表尾部的结点是越早之前访问的。当有一个新的数据被访问时,我们从表头开始顺序遍历链表。 ①如果此数据之前已经被缓存在链表中了,我们遍历得到这个数据对应的结点,并将其以原来的位置删除,然后插入到链表的头部; ②如果此数据没有缓存在链表中,又可以分为两种情况: 如果此时缓存未满,则将此结点直接插入到链表的头部; 如果此时缓存已满,则链表尾结点删除,将新的结点插入到链表的头部。 二、链表的种类 单链表:一个头结点,一个尾结点,尾结点指向为null。 循环链表:尾结点的nex原创 2021-01-18 15:03:44 · 107 阅读 · 0 评论 -
day04数据结构与算法之美(为什么很多编程语言中数组都是从0开始编号)
一、解答 计算机随机访问数组元素的寻址公式: a[i]_address=base_address+i*data_type_size 其中 a[i]_address代表数组下标为i的元素的地址,base_address代表数组的首地址,i代表数组下标,data_type_address代表数组元素的类型大小。 我们可以做出如下假设: ①数组元素从1开始:那么我们寻址公式与之对应就是a[i]_address=base_address+(i-1)data_type_size ②数组元素从0开始:那么我们寻址公式与原创 2020-11-22 11:34:56 · 164 阅读 · 0 评论 -
day03数据结构与算法之美(浅析最好、最坏、平均、均摊时间复杂度)
一、最好情况复杂度(best case time complexity) 在最理想的情况下,执行这段代码的时间复杂度。 二、最坏情况复杂度 在最糟糕的情况下,执行这段代码的时间复杂度。 三、平均情况复杂度(average case time complexity) 用代码在所有情况下执行的次数加权平均值表示。 四、均摊时间复杂度(amortized time complexity) 在代码执行的所有复杂度情况中绝大部分是低级别的复杂度,个别情况是高级别复杂度且发生时序关系,可以将个别高级别复杂度均摊到低级别原创 2020-11-19 21:19:07 · 115 阅读 · 0 评论 -
day02数据结构与算法之美(如何分析、统计算法的执行效率和资源消耗)
复杂度分析是整个算法学习的精髓,只要掌握了它,数据结构与算法的内容基本上就掌握了一半。 一、为什么要复杂度分析 ①测试结果非常依赖测试的环境; ②测试结果受数据规模的影响很大; ③掌握复杂度分析,将能编写出性能更优的代码,有利于降低系统开发和维护成本。 二、时间复杂度(渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系)分析 时间复杂度分析法则: ①只关注循环执行次数最多的一段代码; ②加法法则:总复杂度等于量级最大的那段代码的复杂度; ③乘法法则:嵌套的代码的复杂度等于嵌套内外的代码的复杂度的乘积原创 2020-11-18 22:10:24 · 180 阅读 · 0 评论 -
day01数据结构与算法之美(数据结构与算法的基本概念)
一、系统地学习数据结构 数据结构概念: 广义:数据结构就是指存储一组数据的结构。算法就是操作数据的一组方法。 狭义:队列、栈、堆、二分查找、动态规划等。 二、总结 数据结构就是为算法而服务的,算法要作用于数据结构之上。 三、学习方法 ①边学边练,适度刷题; ②多问、多思、多互动; ③打怪升级式学习; ④反复迭代,不断沉淀。 四、知识点思维导图 ...原创 2020-11-18 21:15:54 · 166 阅读 · 0 评论