数据结构与算法之美
数据结构与算法之美课程积累
假老练啊哦
男性最大的魅力是幽默
展开
-
17|跳表
跳表,能在链表上支持类似“二分”查找算法的数据结构。跳表定义:在链表上加了多级索引的数据结构。它是一种各方面性能都比较优秀的动态数据结构,可以支持快速的插入、删除、查找操作,写起来也不复杂,甚至可以替代红黑树。Redis 中的有序集合(Sorted Set)就是用跳表来实现的。原始的链表在查询的时候只能一个个的遍历,效率低下。那怎么来提高查找效率呢?如果像图中那样,对链表建立一级...原创 2019-11-25 20:13:24 · 123 阅读 · 0 评论 -
15~16 | 二分查找
二分查找相关性质 :二分查找针对一个有序的数据集合,每次通过和区间的中间元素对比,将待查区间缩小为之前的一半,知道查到要查找的元素,或者区间缩小为0。查询的时间复杂度:O(logn)待查区间是:n,n/2,n/4,n/8,...,n/2^k。其中当n/2^k=1时,查询了k = log2n次,并且每次查询只涉及两个数据的大小比较操作,所以时间复杂度是O(logn)如何写一个正...原创 2019-11-25 16:58:28 · 293 阅读 · 0 评论 -
11-14|排序
如何衡量一个排序算法?执行效率最好情况、最坏情况、平均情况时间复杂度。对于要排序的数据,有的接近有序,有的完全无序。有序度不同的数据,对于排序的执行时间肯定是有影响的,我们要知道排序算法在不同数据下的性能表现。 时间复杂度的系数、常数 、低阶。实际的软件开发中,我们排序的可能是 10 个、100 个、1000 个这样规模很小的数据,所以,在对同一阶时间复杂度的排序算法性能对比的时候,我们...原创 2019-11-09 11:09:30 · 266 阅读 · 0 评论 -
10 | 递归
编写递归代码的关键是:只要遇到递归,我们就把它抽象成一个递推公式,不用想一层层的调用关系,不要试图用人脑去分解递归的每个步骤。(但是我觉得简单的递归过程,比如二叉树上的dfs类型的题目,自己要有能画图讲解的能力,有助于你自己的理解,而不是简单的背几个条件,要具体的知道比如到了叶子节点会发生什么?null节点?递归返回的过程?)递归需要注意的问题:如何解决递归代码的堆栈溢出?我们可以...原创 2019-11-04 17:06:44 · 144 阅读 · 0 评论 -
09 | 队列:队列在线程池等有限资源池中的应用
队列的应用也非常广泛,特别是一些具有某些额外特性的队列,比如循环队列、阻塞队列、并发队列。它们在很多偏底层系统、框架、中间件的开发中,起着关键性的作用。比如高性能队列 Disruptor、Linux 环形缓存,都用到了循环并发队列;Java concurrent 并发包利用 ArrayBlockingQueue 来实现公平锁等。如何设计队列?基于数组的队列实现方法队列需要两个指针...原创 2019-11-04 15:52:02 · 159 阅读 · 0 评论 -
08 | 栈:如何实现浏览器的前进和后退功能?(☆)
当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构。如何实现一个“栈”?注意:从数组中删除的操作 ,其实并不需要真正的把某个值删除,只要把我们访问下标给减一就可以了。class Stack {public: int n; int count; int *data; Stack(int num) :n(num),...原创 2019-11-03 22:12:49 · 196 阅读 · 0 评论 -
06 ~07| 链表
经典链表应用场景:LRU缓存淘汰算法。缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非常广泛的应用,比如常见的 CPU 缓存、数据库缓存、浏览器缓存等等。缓存的大小有限,当缓存被用满时候,哪些数据应该被清理,哪些数据应该被保留,需要不同的缓存淘汰策略。常见的三种策略:先进先出策略 FIFO(First In,First Out) 最少使用策略 LFU(Least Freq...原创 2019-10-31 16:12:52 · 114 阅读 · 0 评论 -
05 | 数组:为什么很多编程语言中数组都从0开始编号?
数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。关键字:线性表:数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。非线性表:比如二叉树、堆、图等。之所以叫非线性,是因为,在非线性表中,数据之间并不是简单的前后关系。连续的内存空间和相同类型的数据:实现了随机访问如何实现随...原创 2019-11-01 20:27:00 · 109 阅读 · 0 评论 -
03 04|复杂度分析
直接实验得到算法时间的事后统计法以及其缺点:事后统计法:运行代码,通过统计,监控,得到算法执行的时间和占用的内存。事后统计法的局限性:1、测试结果依赖于测试环境。I9 cpu 和I3 cpu运算速度的不同,导致代码执行的快慢也不同。2、测试结果受到数据规模的影响很大。对于同一个排序算法,待排序数据的有序度不一样,对于执行时间就有很大的区别;测试数据的规模大小,也会影响算法的性...原创 2018-10-05 14:44:21 · 718 阅读 · 0 评论 -
02 | 如何抓住重点,系统高效地学习数据结构与算法?
什么是数据结构?什么是算法?数据结构就是数据的存储结构;算法就是操作数据的方法。举个例子:图书馆藏书为了方便查找,图书管理员一般将各种书籍分类别的放在一起。这种分类存放就是书籍这种数据 的结构。然后在查找的时候,我们当然可以一本一本挨着的查找,或者是首先查找对应的类别 ,然后再查找对应的编号。这种查找的方式都叫算法。具体数据结构:数组、链表、树、图等等具体的算法:二分查找、动态...原创 2019-11-01 10:24:46 · 121 阅读 · 0 评论 -
数据结构与算法之美
极客时间:https://time.geekbang.org/column/intro/126github:https://github.com/wangzheng0822/algo原创 2019-11-01 10:24:37 · 1206 阅读 · 0 评论