自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 图中的Dijkstra 最短路径算法

由于前人已经整理,本文挑了一种较详细的讲解方法。图的最短路径算法。

2024-03-30 18:34:41 101

原创 扩展欧几里得算法

数论中的欧几里得及其证明,扩展欧几里得算法及其证明,代码实现,应用。

2024-01-13 18:42:09 979

原创 欧几里得算法

小学或初中时学过辗转相除法,用于求两个数的最大公约数。欧几里得算法就是利用辗转相除法求最大公约数。整数 a, b 的最大公约数一般表示为 gcd(a, b)。其中a > b。欧几里得算法: gcd(a, b) = gcd(b, a%b)。欧几里得算法实质上式将较大规模的问题转化为较小规模的问题 (因为a%b < b < a)。利用欧几里得算法递归调用,最终问题变得越来越简单,直到gcd(b, a%b) 中的 a%b == 0, 此时最大公约数即为b。

2023-12-23 13:01:46 875

原创 前缀和数组、差分数组、树状数组在Leetcode中的应用

主要讲解树状数组,前缀和数组和差分数组在Leetcode中的应用举例。

2023-12-16 22:40:21 937

原创 从前缀和到树状数组

从前缀和数组到树状数组。lowbi函数。树状数组实现前缀和的查询与原数组的单点修改,并且能达到较高的效率。讲述了树状数组相关细节的介绍和证明。最后用代码实现了树状数组。

2023-12-10 16:12:08 946

原创 使用VS Code进行代码开发

VS Code 是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代码自动补全(又称 IntelliSense)、代码重构、查看定义功能,并且内置了命令行工具和 Git 版本控制系统。用户可以更改主题和键盘快捷方式实现个性化设置,也可以通过内置的扩展程序商店安装扩展以拓展软件功能。使用VS Code可以进行Python, Java, C/C++, Golang等各种语言的开发。只需安装相关扩展即可。可以远程开发,同时支持Windows和Mac系统等。

2023-10-19 23:56:31 114

原创 RLHF中的PPO算法过程微观拆解

强化学习中的PPO算法微观拆解。在强化学习中,Rollout是指在给定的策略下模拟环境的过程。在PPO中,Rollout的过程对应于根据当前的语言模型(策略)生成文本(轨迹)。这个过程依赖于在prompt库中抽取的一个batch的数据Batch Prompt和当前的语言模型LM。语言模型接收一个prompt作为输入,并生成一个Response。这些Response就构成了我们的"轨迹"。Evaluate是在强化学习中对生成的轨迹(在我们的例子中就是文本)进行评估的步骤。在PPO中,这个评估过程由一个。

2023-09-08 12:44:57 725

原创 Leetcode部分习题讲解--字符串与编码

字符串与编码的leetcode部分习题讲解

2023-09-03 16:58:58 64

原创 哈夫曼树与哈夫曼编码

什么是编码?什么是定长编码和变长编码?什么是哈夫曼编码?为什么哈夫曼编码是最优的变长编码?哈夫曼编码的代码演示。

2023-07-09 12:40:35 312

原创 字典树经典例题

字典树相关的LeetCode主要讲经典例题。

2023-06-24 07:59:02 151

原创 双数组字典树

使用场景二:双数组字典树可以存到文件中(序列化,方便传输)。从而可以在一台电脑上建立,然后在另外一台电脑上使用。双数组字典树的使用场景一:节省内存。和普通字典树相比节省了10倍左右的空间。base值如何确定:不同的学术论文有不同的确定优化方案。

2023-05-14 00:08:03 170

原创 字典树基本概念与代码演示

此外构造字典树时还规定同一个节点出发的从左到右的边必须是有顺序的。因此字典树也能做字符串的排序,而且排序的时间复杂度是O(n)的。可以很明显看到从字典树的根节点入手可以进行字符串的查找。因此如果深度遍历一个字典树,那么遍历的结果就是升序的。

2023-04-08 20:48:00 153

原创 字符串匹配算法之Leetcode习题讲解

字符串匹配算法之Leetcode习题讲解。Leetcode 459: 重复的字字符串,采用KMP算法;Leetcode 1392: 最长快乐前缀,同样用KMP算法;Leetcode214 最短回文串,采用KMP算法的变体;Leetcode 5: 最长回文子串,采用马拉车算法;Leetcode 28: 找出字符串中第一个匹配的下标,采用Sunday算法;Leetcode 3: 无重复字符的最长子串,采用二分搜索;Leetcode 14:最长公共前缀,采用暴力匹配算法;Leetcode 12和面试题01.05:

2023-01-01 17:31:12 881 2

原创 字符串经典匹配算法之shift_and算法

字符串经典匹配算法之shift_and算法。shift_and算法的总体思路是把模式串预处理成一种特殊编码形式,然后根据这种编码形式去逐位匹配文本串。shift_and算法的时间复杂度为O(n),可以用于处理流式数据,同时可以用于处理复杂的正则表达式,比如模式串的每一位可能是多个字符。因为shift_and算法的预处理兼容性非常强。

2022-12-11 20:23:53 513

原创 字符串经典匹配算法之Sunday算法

字符串匹配算法之Sunday算法。假设文本串S和模式串T匹配的过程中遇到如下情况,发现失配:此时文本串匹配结果的下一位为a, 那么可以从模式串从后往前寻找‘a’这个字符,发现其在倒数第4位第一次出现,此时可以将模式串向后移动4个位置。‘a’对齐的这个位置称为黄金对齐位。看此时文本串对应位置和模式串是否匹配。不断重复上面的过程,直到模式串和文本串完全匹配。Sunday算法适合在一段已知文本中寻找某个模式串是否出现,极端情况下时间复杂度可以降低到O(n/m)。

2022-12-10 22:56:12 476

原创 【数学基础知识】莫利定理(Morley‘s Theorem)及其直观证明

前两天看了和三角形相关的一个莫利定理,觉得较为有趣,所以做一个记录。过程中仅用到初中方法,但是涉及到的思想较为有趣。莫利定理(Morley's Theorem): 将三角形的三个内角三等分,靠近某变的两条三分内角相交会得到一个交点,三个交点可以构成一个正三角形。

2022-12-10 12:41:28 2569

原创 【数学基础知识】证明三角形的三条垂线交于一点

三角形的三条垂线交于一点。本文用初中知识证明了该定理。

2022-12-09 21:16:44 2647

原创 【数学基础知识】证明三角形的中线交于一点

三角形的三条中线交于一点。本文用初中知识证明了该定理。

2022-12-09 19:45:23 2472

原创 字符串经典匹配算法之KMP算法

本文介绍了字符串经典匹配算法中的KMP算法。理论介绍中首先分析了可以将模式串的逐位比较改为跳位比较,从而引出只要计算好每一个位置的最长公共前后缀,那么就可以进行跳位比较,而且跳几位可以预先计算出来。然后分析了如何计算模式串的最长公共前后缀位置,采用了递推的思想。接下来进行了代码演示,在代码中进行了详细的注释。最后介绍了理论价值,KMP算法相当于状态机,可以处理流式数据,不需要存储文本串的全部内容。

2022-11-27 19:38:02 532 1

原创 字符串经典匹配算法之暴力匹配算法

字符串匹配问题:在一个字符串中查找某个词是否出现过。母串S:要从哪个字符串中查找, 也叫文本串。模式串T:要查找那个词(子字符串)。单模匹配问题:只需查找一个模式串T。匹配方法:用模式串去匹配母串的每一位。例如模式串T的长度为L,那么可以从母串的第一位开始,看往后看的L长的字符串和模式串是否相等,若相等则找到了,若不相等则再从第二位开始往后匹配。意义:虽然该算法没有什么技巧,但是可以不重不漏地进行字符串匹配查找。字符串匹配过程中最重要的也就是不重、不漏。

2022-11-27 16:32:39 586

原创 【数学分析】Bolzano-Weierstrass定理及其证明(有界数列一定存在收敛子列)

Bolzano-Weierstrass定理的描述及证明。该定理又称为列紧性定理、聚点定理。简单描述即为有界数列中一定存在收敛子列。证明过程简单、清晰。

2022-11-19 18:38:22 7087 3

原创 【数学分析】闭区间套定理及其证明

闭区间套定理的描述,理解和证明。无穷的嵌套闭区间,当区间长度趋于0时,最终左端点和右端点收敛到相同的值。

2022-11-19 17:58:18 2390

原创 【数学分析】单调有界定理的证明

数学分析,单调有界定理及其证明。单调数列收敛的充分必要条件是其有界。

2022-11-19 17:17:36 2656 1

原创 夹逼定理证明 sin(x) / x极限

sin(x)/x的极限在很多情况下都要用到,近日突然开始思考该极限的证明过程。首先不能用洛必达法则,因为sin(x)的倒数就是根据这个极限算出来的。今可用夹逼定理证明之。用单位圆中的三角形和扇形的面积进行了巧妙的证明。

2022-11-17 21:23:18 1655

原创 Leetcode刷题之二叉搜索树、平衡二叉搜索树3

主要介绍了Leetcode中二叉搜索树和平衡二叉搜索树相关的几道题目。第一题为面试题17.12: BiNode, 即将二叉搜索树转化为单向链表,这里用了中序遍历的方法,遍历过成中只维护当前节点和遍历的前一个节点。第二题为剑指Offer33:二叉搜索树的后续遍历序列,将后续序列看成一个二叉搜索树,采用中序遍历的方法进行遍历,看遍历的过程中是否保持递增状态。第三题为Leetcode 1008: 前序遍历构造二叉搜索树,采用了递归遍历的方法,分别构造出做左子树和右子树,然后和根节点合并。第四题为面试题04.09

2022-11-13 12:23:30 58

原创 Leetcode刷题之二叉搜索树、平衡二叉搜索树2

本文通过讲解几道Leetcode例题,复习和回顾了二叉搜索树、平衡二叉搜索树的知识。首先回顾了二叉搜索树和平衡二叉搜索树的基本概念、插入和删除相关操作,然后讲了三道例题。第一题为Leetcode 108 将有序数组转化为二叉搜索树。第二题为Leetcode 98, 验证二叉搜索树, 第三题为Leetcode 501 二叉搜索树中的众数。三道题都是将二叉搜索树看做有序序列,属于结构化思维。

2022-11-12 21:09:03 145

原创 Leetcode刷题之二叉排序树、平衡二叉搜索树1

Leetcode刷题笔记,主要为二叉排序树(二叉搜索树), 平衡二叉搜索树(AVL树)。首先回顾二叉搜索树和平衡二叉搜索树的基本概念然后举了三个例题。第一题为面试题04.06: 后继者,在中序遍历二叉搜索树的过程中记录上一个遍历到的节点,当期等于所求节点时,当前节点即为答案。第二题为Leetcode 450: 删除二叉搜索树中的节点,本题可以直接复用之前讲解二叉搜索树时的基本知识中的。第三题为Leetode1382: 将二叉搜索树变平衡,将其看做顺序结构,然后根节点取中间的那个节点,左右子树递归构建。

2022-11-06 16:43:18 612

原创 AVL树基础知识与代码实现

主要介绍一种特殊的二叉排序树--AVL树。主要介绍AVL树的来源,概念,介绍其中经常用到的左旋操作和右旋操作,二叉排序树-AVL树的失衡类型,二叉排序树-AVL树中各种失衡类型的调整方法,涉及所有调整方法的证明。最后用c++语言实现了AVL树的插入和删除操作。引入虚拟空节点,使得AVL树的调整过程极为简洁和优美。

2022-10-30 20:36:30 140

原创 二叉排序树基础知识与代码实现

主要介绍普通二叉排序树(二叉搜索树)的基础知识与代码实现。其中包括二叉排序树(二叉搜索树)的基本概念介绍,二叉排序树(二叉搜索树)的插入操作,二叉排序树(二叉搜索树)的删除操作。删除操作中又分为删除度为0的节点,删除度为1的节点,删除度为2的节点。将删除度为2的节点转化为寻找其前驱或后继,然后删除前驱或后继节点。最后用代码完整地实现了二叉排序树(二叉搜索树)的插入与删除操作。

2022-10-29 21:38:23 342

原创 Leetcode 刷题: 面试专项1

力扣1367: 二叉树中的链表; 力扣958: 二叉树的完全性检验;剑指Offer 36: 二叉搜索树与双向链表; 力扣464: 我能赢吗;力扣172: 阶乘后的零;力扣384: 打乱数组;力扣473: 路径总和;力扣395: 至少有k个重复子串的最长子串;力扣190: 颠倒二进制位;力扣8: 字符串转换整数(atoi) ;力扣380: O(1)时间插入、删除、获取随机;力扣402 : 移掉K位数字;力扣1081: 不同字符的最小序列;力扣1499: 满足不等式的最大值;力扣321: 拼接最大数

2022-10-23 21:40:53 189

原创 单调栈及经典问题

单调栈的基本概念、代码演示、典型例题。

2022-09-25 19:08:13 349

原创 Leetcode刷题笔记: 二分、搜索、动规复习

比如初始只有一个袋子,袋子数量为9,最大次数为1,当最大球最小的数量x分别为【1, 2, 3, 4, 5, 6, 7, 8, 9】时(注意最大最小球的数值范围只能是[1, nums.max()]), 可以消耗的次数ops分别为【8, 4, 2, 2, 1, 1, 1, 1, 0】, 当ops=1时, x 最小为5, 此即答案。题目解析:对于某一个学生,向左看有x1个连续递减的学生,向右看有x2个连续递减的学生,则该同学应该被分到的糖果数量为max(x1, x2).总结:深搜回溯上下为反逻辑;

2022-09-18 13:17:49 120

原创 单调队列及经典问题

数据结构:定义一种性质并且维护这种性质。数据结构-队列:存储、获取、删除数据的一种结构。这种结构中,保证先存储的数据被先获取/删除,后存储的数据被后获取/删除。像排队一样,先进先出。单调队列:队列中的数据始终保持从队首到队列单调递增或单调递减的性质。解决什么问题:单调队列解决滑动窗口的最值问题;一些实际问题可以转化为滑动窗口的最值问题。

2022-09-03 23:38:08 442

原创 算法与基础数据结构Leetcode部分题目解析

走出上述循环判断后,name + “(” + count + ")在哈希表中必不存在,将其加到结果数组中,同时更新哈希表key为name 的值和key为name + “(” + count + ")的值。用广搜时,对其下属依次入队,每次出队时计算重要性。针对这种情况,可以在遍历数组时首先做一个前处理,比较数组最左边和最右边的元素,若二者相等,则不断移动最左边的位置,直到二者不相等。解题思路:可以用一个集合存储糖果类型,当集合的数量不小于n/2时,最多能吃到n/2个糖果类型,否则只能吃到集合数量的糖果类型。

2022-08-21 22:02:08 224

原创 深度搜索、广度搜索及经典例题(下)

搜索从初始状态,通过某种转化到中间状态,最终转化到终极状态的过程。深度搜索先不断从某一方向进行状态转化,直到无法转化,最后再回溯地向其他方向转化搜索。广度搜索先找到转化一步能遍历到哪些状态,然后找到转化两部能到达的状态,直到找到最终的状态。深搜和广搜的本质穷举遍历。深搜一般用递归实现适合解决连通性的问题,广搜一般用队列实现,适合解决求距离的问题。............

2022-07-24 12:03:57 1667

原创 深度搜索、广度搜索及经典例题(上)

搜索从初始状态,通过某种转化到中间状态,最终转化到终极状态的过程。深度搜索先不断从某一方向进行状态转化,直到无法转化,最后再回溯地向其他方向转化搜索。广度搜索先找到转化一步能遍历到哪些状态,然后找到转化两部能到达的状态,直到找到最终的状态。深搜和广搜的本质穷举遍历。深搜一般用递归实现,广搜一般用队列实现。...............

2022-07-17 23:59:15 783

原创 Leetcode863:二叉树中所有距离为k的节点

假设已经找到了所有距离为k-1的节点,对于其中的每个节点,找到和其距离为1的节点,即为和target距离为k的节点。而对于每个节点,要找到和其距离为1的节点,除了左右子树外,还有父节点,所以可以用一个。距离为0的节点,然后向外扩充找到距离为1的节点,接着找距离为2的节点,直到找到所有距离为k的节点。这里k-1距离节点在之前被查找出来,现在要用其找下一层节点,是先进先出的需求,所以用。要找到二叉树中和某个节点距离为k的所有节点,返回节点对应的值列表。节点,要找到和其距离为k的节点,首先找到和。........

2022-07-16 17:44:57 234 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除