![](https://img-blog.csdnimg.cn/20200409085325710.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
文章平均质量分 86
学习算法大概,只需要啃懂一本算法导论。
Debroon
万象禅心(升级AI医疗行业 + Web3自动化科学家 + 大商家族),闲下写点自己感兴趣的~
展开
-
差分数组 & 技巧小记
对比常规,给一个区间 [l,r] 上的数组加一个常数c, [l,r] 每个元素都要依次加上c,这样的时间复杂度是 O(n) 的。如果两个信息“长得很像”,只要保留一个,对另一个,只要保留它们的差异,然后进行微调就行了。对区间 nums[i…对区间 nums[i…而差分数组只修改头、尾,O(1) 的时间。适用场景,频繁对某个区间的元素进行增减。原创 2023-05-02 19:21:02 · 679 阅读 · 0 评论 -
前缀和 & 技巧小记
比如计算 nums[1,4] 元素和 = preSum[5] - preSum[1].前缀和适用于快速、频繁地计算一个索引区间内的元素之和。在 nums 中寻找和为 target 的子数组。二维数组的子矩阵的元素之和,也能使用前缀和。但放在别的程序,往往需要多次计算区间。可以借助哈希表减少一个循环。原创 2023-05-01 10:07:29 · 536 阅读 · 0 评论 -
二叉树和递归框架
因为位置的原因,前序位置的代码只能从函数参数中获取父节点传递来的数据,而后序位置的代码不仅可以获取参数数据,还可以获取到子树通过函数返回值传递回来的数据。递归函数,二叉树的每一个节点需要做什么(回溯模式、分解子问题模式),需要在什么时候(前\中\后序)做。核心在于 for 循环里面的递归,在递归之前做选择,在递归之后撤销选择。撤销选择:在离开节点后,从路径中拿出一个选择,将它恢复到选择列表中。做选择:在进入节点前,从选择列表拿出一个选择,将它放入路径。只要涉及递归的问题,都是树的问题,或者说树的遍历。原创 2023-01-23 20:18:12 · 934 阅读 · 0 评论 -
KMP算法
我们看图可知,绿色块和红色块不同,但左边绿色块前面没有其他字母了,所以 LPS[i] = 0。假设现在已知第 i-1 个字母最长相同前缀后缀等于 a,即 LPS[i - 2] = a。比如,现在 B 和 C 不相等,LPS[B] = 2,最长相同前缀后缀是:A B。第六个字母 B 的最长相同前缀后缀是 A B A B,所以 LPS[6] = 4。递推的初始条件:LSP[0] = 0,第一个字母没有前缀,一定等于 0。第二个字母 B 和前面的字母 A,没有重合,所以 LPS[1] = 0。原创 2022-12-09 00:02:42 · 349 阅读 · 0 评论 -
归并排序笔记
归并排序原理算法策略:分治归并图示归并排序的微观模拟自底向上的归并排序优化在有序数组上,变成 O(n) 算法加入插入排序内存操作优化题目增益逆序对数量 原理算法策略:分治以冒泡排序为例,之所以慢,是因为每一次选出一个最大的数,都要和其它所有的数字相比,其实并不需要这么麻烦,要想提高效率,就要减少数据之间的相互比较。最早对冒泡排序的改进是一种叫做归并排序的算法,它就利用了少做事情的思想,归并排序的思想大致如下:冒泡排序:假如有一个学区,里面有 2 万名高中学生,如果让大家到一个.原创 2022-05-14 19:03:42 · 330 阅读 · 0 评论 -
快速排序:管理必须分层级,效率必须有区分
快速排序全面解析原理 原理快速排序思想:在评判“最好”之前,我们还是要加一些限制条件,比如是一般情况下最好,还是恶劣的情况下最好。首先,对于一大堆无序的数字,从中随机挑选一个,比如是53,这个被随机选上的数字被称为枢值(枢纽的枢),接下来,将所有要排序的数字分成两部分,第一部分是大于等于枢值53的,第二部分是小于枢值53的。在第一步完成后,一大堆无序的数字就变得稍微有序一点了。第二步,从上面得到的两堆数字,分别采用第一步的方法各自再找一个枢值。对于第一堆,由于所有的数字都比53.原创 2021-11-11 16:04:23 · 695 阅读 · 1 评论 -
模式匹配:滚动哈希到 Rabin-Karp 算法
模式匹配:滚动哈希到 Rabin-Karp原创 2021-11-06 13:24:26 · 332 阅读 · 0 评论 -
排序算法的推导思想
排序算法的推导思想主线:排序算法的来龙去脉地精排序:攘外必先安内(贪心)冒泡排序:一直攘外(贪心)选择排序优化:比而不换锦标赛排序:从全局排序到局部排序(只排前几名,少做无用功)堆排序:锦标赛排序的改进 主线:排序算法的来龙去脉计算机最早的排序算法源于人的生活和经验,那么我们人是怎么排序的呢?如果只有三五个数字,我们可以扫一眼就排完了序。但如果到几十个数字,这就有点麻烦了,因为如果没有一个必须严格遵守的流程,排完序经常会有些小错误。问题:如何给班上50个同学的成绩排序?在没有计算.原创 2021-05-08 14:02:18 · 493 阅读 · 0 评论 -
递归设计之道:归去来兮
递归设计之道基础套路万能模版优化技巧常用模式执行过程:函数的入栈与出栈数据结构与算法递归数据类型递归与回溯递归与分治 基础套路 万能模版 优化技巧 常用模式 执行过程:函数的入栈与出栈 数据结构与算法 递归数据类型 递归与回溯 递归与分治...原创 2020-09-01 13:14:51 · 445 阅读 · 0 评论 -
二分查找的循环不变量全面解析
二分法原理模版实践 原理二分法:相较于顺序查找,二分法查找的不是单个元素,而是一个范围。利用数据中的规律不断的将搜索范围减半。比如,猜数字游戏。朋友让您在心目中想一个 1−10001-10001−1000 的数字,而后您问朋友问题,对方回答:YesNo您最多也只要用 101010 次一定能够猜出他心目中想的数字。第一次只要问朋友是否小于 500500500,如果TA给出了肯定的答案,说明数字在 1−4991-4991−499 里面,第二次折半问TA这个问题即可。类似地.原创 2020-07-09 21:23:14 · 1034 阅读 · 0 评论 -
链表结构实现
链表结构实现数据结构单向链表的实现utlist 使用宏实现泛型单向链表glist 泛型单向链表『扩展方向』算法Leetcode训练指南递归实现链表的基本操作单向链表 + 异或 = 双向链表『扩展方向』 数据结构 单向链表的实现 utlist 使用宏实现泛型单向链表 glist 泛型单向链表 『扩展方向』 算法 Leetcode训练指南 递归实现链表的基本操作.原创 2020-06-04 12:55:51 · 504 阅读 · 0 评论 -
数组结构实现
数组数据结构动态数组结构实现utarray 使用宏实现动态泛型数组garray 泛型动态数组实现『扩展方向』算法Leetocde训练指南『扩展方向』 数据结构动态数组结构实现/* C */#define T inttypedef struct _array{ long long _size; long long _capacity; T *_array;} Array;void __Array(Array * A);void Array__(Array * A);.原创 2020-05-30 11:30:11 · 302 阅读 · 0 评论 -
渐进记号(一月最佳)
《目录》快速排序或者说是分而治之的数学原理 大O记法 最好、最坏、平均、均摊时间复杂度 复杂度参考 空间测试 证明:基于比较的排序算法最大比较次数为对于计算机算法来说,虽然衡量其好坏的标准非...原创 2019-01-31 18:00:46 · 1035 阅读 · 0 评论 -
量子计算
《目录》量子计算的性质量子叠加 量子纠缠 量子算法 计算的本质 量子输入 量子输出量子计算的性质量子计算是采用量子力学原理进行计算的。量子的特性:量子叠加(既...又...) 量子...原创 2019-10-28 09:16:28 · 1659 阅读 · 0 评论 -
有限状态机
有限状态机 在计算机中是一份可以运动的代码。这份代码有 有限个状态,里面的变量只能有 有限个状态,比如:// 定义枚举类型,共 9 种状态typedef enum{ S1, S2, S3, S4, S5, S6, S7, S8, S9,}STATE;STATE cur_s = S1;// 枚举类型的变量 cur_s 就只有 有限个状态(9个)...原创 2019-06-12 13:39:18 · 683 阅读 · 0 评论 -
递归
通篇隐喻,看官自明。 《目录》递推的感性认识 递归的感性认识 八皇后摆放问题 蹭同桌饭的游戏 为你写诗--递归 练习·为你(递归)写诗 尾递归与不爆栈的递归开元盛世 开元二十三年...原创 2019-02-18 09:28:25 · 620 阅读 · 0 评论 -
密码学(二月最佳)
《主干目录》第一代加密隐藏第二代加密 移位替代同音替代第三代加密 维吉尼亚加密第四代加密Enigma(恩尼格玛机)第五代加密 DES第六代加密RSA第七代加密量子加密 ...原创 2019-02-08 17:25:31 · 10152 阅读 · 2 评论 -
算法训练:嘘,别人我不告诉TA
文章目录算法 or 解谜游戏基础的设计能力:不知道如何下手怎么办?基础的建模能力:数组、链表,以及优化的柔性数组解题技巧:也说不清楚,就是对这道题有 feel 嘛!攻略:新手、老手和大神之间的差异。模型:一题多解怎么来?应用:如何把问题与某个抽象的模型相连? 算法 or 解谜游戏编程、数学是十分适合自学的,因为一道题对不对,您可以立马得到答案。哪怕您很喜欢编程,也会如我一样...原创 2020-04-05 10:45:32 · 4227 阅读 · 2 评论 -
算法!司南。
《目录》难题的定义NP困难 猜想 NP 完全问题 旅行商问题的外卖解法 最近邻居法 小谈 · 图灵停机问题基础算法模版 迭代加深搜索(可代替BFS...原创 2019-04-06 16:41:19 · 1242 阅读 · 0 评论 -
日历算法 [ 解读算法的乐趣 ]
判断闰年 星期几 儒略日计算 蔡勒公式 输出12个月份 二十四节气的天文学计算 历法,是一种推算年、月、 日的时间长度和日历编排规则之间的关系,是指定时间序列的法则。我国的官方历法是目前全球各国通用的 公历,也就是公元纪年。公历实际上是从 1582 年 10 月 15 日开始实行的格里...原创 2019-03-26 19:20:19 · 3153 阅读 · 0 评论 -
NP完全性的解读与延伸
在《CLRS》(算法导论)第 33 章 的 [NP 完全性] 这地方,花了很大力气才搞明白 部分【题目】和【推理逻辑】。所以,想写一份入门级的解读。 《目录》 判定问题图灵停机问题 不可...原创 2019-11-28 13:51:27 · 648 阅读 · 0 评论 -
对抗逼婚的正确姿势
啊,春节是逼婚的高发期哟~ 《目录》父母篇 老人篇 三姑六姨篇 最优停止理论 【37% 算法 】 找结婚对象父母篇正如标题所言,姐,你是不是遇到了难题啦!家里开始“施压”...(通常是父母...原创 2019-10-01 16:08:08 · 389 阅读 · 0 评论 -
概率分析和随机化算法
《目录》前置知识 雇用问题 随机 期望时间 随机排布数组 洗牌算法 生日悖论前置知识【随机变量】:在郑骰子等与概率有关的问题中,我们想要定量的思考这些问题,就需要一个叫“随机变量”的武器。就...原创 2019-10-24 18:59:49 · 888 阅读 · 2 评论 -
数据结构 | 从哪里开始?
是什么编程要想写好程序,就需要学习数据结构;可数据结构是什么呢,我们以画画来举个例子。一般人画画通常就直接画 --- 如画水里的两条金鱼就直接从某一个部分开始,从外形画起来了。专业画家不是这么画的,他们会把金鱼分解成几个简单的几何图形 --- 如头是一个大圆(头)和两个小圆(两个眼睛),身子是一个椭圆,鳍和尾巴是几个三角形。一般人的画法结果经常是,画到后来比例不对,而且常常画得不像...原创 2019-10-18 15:53:36 · 953 阅读 · 0 评论 -
插入排序
《目录》插入排序 循环不变式 优化插入排序算法导论的第二章,以一个简单的算法(插入排序)入手,讲解算法分析里一些关键的技术。算法是计算方法的简称,而计算方法是为了解决问题而存在的。那么插入排序这样的算法是...原创 2019-09-30 19:04:55 · 224 阅读 · 0 评论 -
主定理
《目录》使用主定理求解递归式 ???? 算例 ???? 证明主定理使用主定理求解递归式主定理是分治算法分析中非常重要的定理。如,我们要处理一个 规模为 的问题通过分治,得到 个规模为的问题,分解子问题和合并子...原创 2019-09-24 13:42:14 · 21208 阅读 · 1 评论 -
递推式分析
《目录》递推式 代换法求解递推式 更强的归纳假设 递归树求解递推式 算法设计的时候,可能会设计出不错的算法;难点在于算法分析。 对于更好的算...原创 2019-09-20 20:44:42 · 1981 阅读 · 0 评论