数据结构算法学习
文章平均质量分 66
阿尔法鹿
越努力越幸运
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
链表上LRU缓存淘汰算法原理
单链表:查找时间复杂度O(n),单独的删除和插入操作时间复杂度为O(1),但是实际删除肯定要遍历找到目标节点再删除时间复杂度为O(n)。循环链表:处理的数据具有环型结构特点时,就特别适合采用循环链表,比如大名鼎鼎的约瑟夫问题双向链表:向链表要比单链表占用更多的内存空间,但可以支持双向遍历。双向链表可以支持 O(1) 时间复杂度的情况下找到前驱结点,正是这样的特点,也使双向链表在某些情况下的插入、删除等操作都要比单链表简单、高效。在实际的软件开发中,从链表中删除一个数据无外乎这两种情况:原创 2021-06-28 21:32:03 · 137 阅读 · 0 评论 -
线性表-数组
数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。为什么数组下标从0开始:a[k]_address = base_address + k * type_size这是数组的寻址公式,如果下标从0开始,寻址公式就变成a[k]_address = base_address + (k-1)*type_size这样每次随机访问数组元素都多了一次减法运算,对于 CPU 来说,就是多了一次减法指令。数组最主要特点:最大的特点就是支持随机访问,但插入、删除操作也原创 2021-06-28 14:23:01 · 328 阅读 · 0 评论 -
复杂度分析下
这篇博客简单总结了最好情况时间复杂度、最坏情况时间复杂度、平均情况时间复杂度、均摊时间复杂度 四种复杂度。分析这四种复杂度得原因是同一段代码,在不同输入的情况下,复杂度量级有可能是不一样的。首先根据以下代码快速理解前三种复杂度:// n表示数组array的长度int find(int[] array, int n, int x) { int i = 0; int pos = -1; for (; i < n; ++i) { if (array[i] == x) {原创 2021-06-28 11:50:05 · 198 阅读 · 0 评论 -
复杂度分析上
什么是复杂度分析:1.数据结构和算法需要研究如何更快更省解决问题,因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能。2.分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为复杂度。3.复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系。为什么要进行复杂度分析:1.我们需要一个不用具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法2.和性能测试相比,复杂度分析有不依赖执行环境、成本低、效率高、易操作、指导性强的特点。3.掌握复杂度分析,将能编写出性能更优的原创 2021-06-28 01:41:18 · 295 阅读 · 0 评论 -
如何系统高效学习数据结构与算法
是什么:数据结构指的是“一组数据的存储结构(图书馆的书架)”,算法指的是“操作数据的一组方法(在图书馆找书用到的方法)”。数据结构是为算法服务的,算法是要作用再特定的数据结构上的。学什么:效率和资源消耗的度量衡–复杂度分析。最常用、最基础的20个数据结构与算法,学习他们的:“来历”、“特点”、“适合解决什么问题”和“实际的应用场景”。数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树算法: 递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字原创 2021-06-28 00:20:35 · 192 阅读 · 0 评论
分享