随笔分类 -  08、数据结构与算法之美

极客时间-王争老师-数据结构和算法之美
摘要:一、什么是二分查找? 二分查找针对的是一个有序的数据集合,每次通过跟区间中间的元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间缩小为0。 二、惊人的查找速度 O(logn) 我们假设数据大小是 n,每次查找后数据都会缩小为原来的一半,也就是会除以 2。最坏情况下,直到查找区间 阅读全文
posted @ 2020-08-12 11:04 甘劭 阅读(3001) 评论(0) 推荐(0)
摘要:一、什么是递归? 数据结构和算法有两个难点,一个是递归,一个是动态规划。 方法或函数调用自身的方式称为递归调用,调用称为递,返回称为归。 举例: 以在电影院看电影为例,如果你想知道你前面有多少排,于是你问前面一排的人,前面一排的人再继续问前面一排的人。 其中代表你想知道你自己在哪一排,表示你前面一排 阅读全文
posted @ 2020-07-30 09:49 甘劭 阅读(319) 评论(0) 推荐(0)
摘要:一、如何理解队列? 队列跟栈一样,也是一种操作受限的线性表数据结构。 栈只支持两个基本操作:入栈 push()和出栈 pop()。队列,先进者先出,入队 enqueue(),放一个数据到队列尾部;出队 dequeue(),从队列头部取一个元素。 队列的应用:比如循环队列、阻塞队列、并发队列。它们在很 阅读全文
posted @ 2020-07-24 11:28 甘劭 阅读(391) 评论(0) 推荐(0)
摘要:一、如何理解栈 栈就是一个先进后出,后进先出的数据结构。 从操作特性上看,栈是一种操作受限的线性表,只允许在一端插入和删除数据。 虽然使用数组和链表能够替代栈这种数据结构,但是数组与链表向外暴露了太多的api接口,操作上面虽然自由,但是使用的时候就比较不可控,自然也就更容易出错。 当某个数据集合只涉 阅读全文
posted @ 2020-07-21 16:51 甘劭 阅读(510) 评论(0) 推荐(0)
摘要:技巧一:理解指针或者引用的意义 指针或者引用都是存储对象的内存地址。 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。 例子: p->next = q。这行代码的意思是p节点的next指针存储了q节点 阅读全文
posted @ 2020-07-17 13:54 甘劭 阅读(281) 评论(0) 推荐(0)
摘要:1、什么是约瑟夫问题 约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后杀死所有人。于是约瑟夫建议:每次由其他两人一起杀死一个人,而被杀的人的先后顺序是由抽签决定的,约瑟夫有 阅读全文
posted @ 2020-06-11 18:14 甘劭 阅读(634) 评论(0) 推荐(0)
摘要:1、常用缓存策略 缓存淘汰策略:指的是当缓存被用满时清理数据的优先顺序。 缓存是一种提高数据读取性能的技术,比如常见的cpu缓存、数据库缓存、浏览器缓存。但是缓存的大小有限,当缓存用满的时候,哪些数据应该被清理出去,哪些数据应该被保留? 解决方案:FIFO(First In,First Out) > 阅读全文
posted @ 2020-05-09 16:59 甘劭 阅读(320) 评论(1) 推荐(0)
摘要:1、什么是数组? 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 概念解析: 线性表:线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。 连续的内存空间和相同类型的数据:所以数 阅读全文
posted @ 2020-02-23 13:17 甘劭 阅读(488) 评论(0) 推荐(0)
摘要:1、时间复杂度分析有哪些? 最好情况时间复杂度(best case time complexity) 最坏情况时间复杂度(worst case time complexity) 平均情况时间复杂度(average case time complexity) 均摊时间复杂度(amortized tim 阅读全文
posted @ 2020-02-21 16:45 甘劭 阅读(1339) 评论(0) 推荐(0)
摘要:1、大 O 复杂度表示法 1 int cal(int n) { 2 int sum = 0; 3 int i = 1; 4 int j = 1; 5 for (; i <= n; ++i) { 6 j = 1; 7 for (; j <= n; ++j) { 8 sum = sum + i * j; 阅读全文
posted @ 2020-02-17 20:09 甘劭 阅读(300) 评论(0) 推荐(0)
摘要:一、相关术语 1、原地排序算法,就是特指空间复杂度是 O(1) 的排序算法。 2、稳定性指的是如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。 3、逆序度 = 满有序度 - 有序度 有序度是数组中具有有序关系的元素对的个数。有序元素对用数学表达式表示就是这样:有序元 阅读全文
posted @ 2019-02-14 22:54 甘劭 阅读(626) 评论(0) 推荐(0)