![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习
文章平均质量分 93
DeadPool loves Star
存储系统方向,热爱操作系统,乐于尝试不同的设计框架
展开
-
Review of Combinatorics (HITSZ)含22年真题
HITSZ组合数学复习记录,包含22年真题回顾原创 2023-02-11 22:06:18 · 978 阅读 · 1 评论 -
Review of Algorithm (HITSZ) 含22年真题回忆
HITSZ硕士算法复习(含22年真题回忆)原创 2022-11-11 10:02:50 · 607 阅读 · 2 评论 -
算法设计复习:排序
算法设计复习:排序分治思想快排归并排序排序的下界最坏情况平均情况这一节掌握几点:分治思想(递归算法)快排归并排序排序问题的下届(最坏情况/平均情况)分治思想分:原问题可以分为几个子问题;治:原问题和子问题解法相同;合并:将子问题的解合并起来得到原问题的解;快排快排重点在于划分Partition快排算法的精髓在于Partition。所谓Partition,即在给定数组中随机挑选一个值Key,然后把数组以Key划分为Key左边的值都小于Key,右边的值都大于Ke原创 2020-08-19 21:24:33 · 162 阅读 · 1 评论 -
算法设计复习:时空复杂度相关符号
算法设计复习:时空复杂度相关符号θ{\theta}θΩ{\Omega}ΩO{O}Oω{\omega}ωo{o}o要开始复习了,大学僧真苦逼,开学考试,这我还真是第一次见θ{\theta}θθ{\theta}θ是渐进紧确界符号,先给一幅《算法设计与分析》中的图示意:再给出θ(g(n)){\theta(g(n))}θ(g(n))的定义:θ(g(n))={f(n):存在正常数c1,c2,n0,使得当n>n0时,0≤c1g(n)≤f(n)≤c2g(n)恒成立}{\theta(g(n))} =原创 2020-08-19 10:16:01 · 559 阅读 · 0 评论 -
自己推导的相连循环的化简公式
自己推导的相连循环的化简公式前言示例证明算法步骤证明前言题目要求求解某某置换的阶:例如:φ=(1,3,7,2,4,5,6)(2,4,6,7,10)(2,4,6)(4,7,10)\varphi=(1,3,7,2,4,5,6)(2,4,6,7,10)(2,4,6)(4,7,10)φ=(1,3,7,2,4,5,6)(2,4,6,7,10)(2,4,6)(4,7,10)我们已有的工具是:k−循环的阶数为kk-循环的阶数为kk−循环的阶数为k不相连循环的阶之积为各因子阶的最小公倍数不相连循环的阶之积为各原创 2020-05-25 15:34:57 · 896 阅读 · 0 评论 -
算法导论——字符串搜索KMP算法
算法导论——字符串搜索KMP算法理论前缀表KMP算法实现思路前缀表实现原理C#实现Program.csKMP.csKMP算法,俗称Kill Myself Personally。。。不过今天总算明白了。理论KMP算法不容易想,比较晦涩难懂。不过当你知道了它的思想后,算法实现就变得稍微容易起来。在我的上一篇博客算法导论——字符串搜索FiniteMachine有限状态机实现中,我们提到了状态q...原创 2020-04-30 19:03:49 · 459 阅读 · 0 评论 -
算法导论——字符串搜索FiniteMachine有限状态机实现
算法导论——字符串搜索FiniteMachine有限状态机实现理论实践Program.csFiniteMachine.cs数字逻辑、计组等等我们都遇到过有限状态机,如Moore机,Mealy机。算法中的状态机同样有意思,当面对情况较多的时候,我们通常可以用状态机的思想来编写算法。这也是有限状态机的优秀思想理论如何用状态机的思想来解决字符串匹配的问题呢?我想通过一个简单的例子,大家便能够知...原创 2020-04-30 17:48:20 · 438 阅读 · 0 评论 -
算法导论——字符串搜索Rabin-Karp算法实现
算法导论——字符串搜索Rabin-Karp算法实现理论Rabin-Karp算法求模改进C#实践Program.csRabinKarp.csRabin-Karp算法是基于指纹的字符串匹配算法,这里就不得不提到一些听歌识曲的算法——Shazam,也是通过音乐指纹来进行乐曲的匹配。思路很简单,不过坑却很多。理论Rabin−KarpRabin-KarpRabin−Karp算法的理论很简单,要点有...原创 2020-04-30 17:20:37 · 258 阅读 · 0 评论 -
算法导论——Rabin-Karp算法求模证明(2)
算法导论——Rabin-Karp算法求模证明(2)公式欲证证明结论上一篇我们证明了Rabin-Karp算法的初始化求模部分,即接下来,我们来证明,这一部分公式1.(a+b) mod p=[(a mod p)+(b mod p)] mod p1.(a+b)\ mod\ p = [(a\ mod \ p)+(...原创 2020-04-28 17:01:30 · 295 阅读 · 4 评论 -
算法导论——Rabin-Karp算法求模证明(1)
算法导论——Rabin-Karp算法求模证明(1)公式欲证证明结论研究了好久Rabin-Karp算法的求模过程,现在终于明白,我们应该以逆向思维去思考这个过程,否则就会陷入泥潭公式1.(a+b) mod p=[(a mod p)+(b mod p)] mod p1.(a+b)\ mod\ p = [(a\ ...原创 2020-04-28 16:44:31 · 303 阅读 · 0 评论 -
算法导论——A*算法易懂的证明
算法导论——A*算法易懂的证明前言A* 证明证明采用反证法,课上老师讲解不够清晰,课后自己下了点功夫,明白了A * 算法的原理。前言A*算法,其核心思想在于f(n)和Best-First.其中 f(n) = g(n) + h(n),h(n)是代价估计函数,g(n)是出发点到点n的距离。我们假设结点n可以到达m个结点。这m个结点形成一个集合S。进一步的,h(n) = minDistan...原创 2020-04-14 13:47:15 · 1752 阅读 · 1 评论 -
算法导论实践——旅行商问题
算法导论实践——旅行商问题理论废话说了一大堆,直接实践。C#实践给出测试样例应该的结果TravelProblem.csProgram.cs结尾这个算法感觉也很巧妙。抓住代价矩阵的性质便能够进行剪枝操作,从而大大减少搜索次数。你就感觉很神奇理论这部分按照上课的PPT给出。首先定义旅行商问题简单的说,我们有一张地图,地图上有很多景点,景点与景点之间有不同路程的小路。我们的任务就是如何...原创 2020-04-09 21:20:52 · 1909 阅读 · 2 评论 -
算法导论实践——一看代码就会的BFS和DFS,贼刺激
算法导论实践——一看代码就会的BFS和DFS,贼刺激理论C#实践DFSSum.csBFSSum.csProgram.csBFS和DFS的理论比较简单,直接看代码注释方可较为轻松地理解。本次实践以搜索子数组和为例。理论BFS,即广度优先搜索。下面,举一例说明。假设性感的小红被猛男层层包围(这里有三层)。小红要从中选择她的男朋友。假设她的择偶标准唯一——那就是长度(身高~手动滑稽)。那么小...原创 2020-04-07 16:54:31 · 196 阅读 · 2 评论 -
算法导论实践——贪心算法范例HuffmanTree(霍夫曼树)
算法导论实践——贪心算法范例HuffmanTree(霍夫曼树)理论贪心算法原理实践队列优先队列的堆实现MinHeap.csMinPriorityQueue.cs霍夫曼树实现很早之前就接触过了,今天知道霍夫曼树竟然是贪心算法,是我等级太低了。理论设C是最优前缀编码树,B(C)为编码树的代价则优化子结构:令C’ = C - z, 且x、y为C中值两个结点,有Z.Key = x.Key...原创 2020-04-02 20:32:52 · 433 阅读 · 0 评论 -
算法导论实践——OptimalBST(最优搜索二叉树)
算法导论实践——OptimalBST(最优搜索二叉树)——这波是脑壳痛理论C#实践OptimalBinarySearchTree.csProgram.cs动态规划的思想,很巧妙(话又说回来,什么东西不巧妙呢)理论思路就是,取得Kr∈{Ki...Kj},以Kr为根节点构造两颗最优BST,{Ki...Kr-1}和{Kr+1...Kj}1.设E[i,j]代表{Ki...Kj}和{Di-1....原创 2020-03-31 16:38:10 · 937 阅读 · 0 评论 -
算法导论实践——背包问题(完全背包问题和0/1背包问题)
算法导论实践——背包问题(完全背包问题和0/1背包问题)理论前言完全背包问题0/1背包问题实践UnboundedKnapsack.csZero_OneKnapsack.csProgram.cs以前感觉很高大上,现在理解了觉得也不是太难。其中0/1背包问题理解起来比较有难度。理论前言代码参考课堂PPT完成,0/1背包问题的思考花费了大量时间。事实上,完全背包问题就是在容量x给定的基础上每...原创 2020-03-26 18:19:29 · 479 阅读 · 0 评论 -
算法导论实践——矩阵链乘
算法导论实践——矩阵链乘理论实践MatrixMultiply.csProgram.cs理论很简单,划分矩阵,寻找划分点即可,在此不做赘述。扣PPT以示之。理论实践MatrixMultiply.csusing System;using System.Collections.Generic;using System.Text;namespace DynamicProgrammi...原创 2020-03-26 14:43:15 · 128 阅读 · 0 评论 -
算法导论实践——最长公共子序列
算法导论实践——最长公共子序列(LCS——Longest Common Sequence)理论实践LCS.csProgram.cs感觉很Level很高,竟然可用于DNA相似度对比,记录下来,并作为动态规划的学习案例。理论动态规划的范例。优化子结构设X[i]代表数组X的前i个元素,LCS[i][j]代表X数组的前i个元素和Y数组的前j个元素的最大公共子序列。那么有优化子结构:L...原创 2020-03-26 13:54:26 · 203 阅读 · 0 评论 -
算法导论实践——最大连续子序列
算法导论实践——最大连续子序列(LeetCode 53题)理论实践BigMaxSubArray.csProgram.cs很巧妙的算法,没有看参考思路的话自己应该想不出来。之前觉得不用分治递归无论如何都需要O(n2)的时间复杂度(想要应用动态规划,但却不知道怎么用,脑子里却死活都是二维定义M[i,j]之类的 ),就算是教材上的分治递归也需要O(nlogn)。经过高人指点后,不得不赞扬算法的神奇。...原创 2020-03-24 16:50:58 · 146 阅读 · 2 评论 -
算法导论实践——选择第i大的数
算法导论实践——选择第i大的数理论一些约定正式开始将数组分组,按照每五个一组划分找出每一组的中位数。选择中位数中的中位数(MoM)。利用选择的MoM划分递归搜索即可复杂度分析实践BigDataMedianUtil.csProgram.cs算法的魅力就在于,明明感觉思路很简单,想要实现却要花上一阵不小的功夫,今天给大家表演的是,第i大数的选取,可以利用这个函数进行中位数的选择。理论啰嗦一...原创 2020-03-19 18:02:51 · 556 阅读 · 0 评论 -
算法导论——排序的下界
算法导论——排序的下界OneNote 排序下界笔记上课恍惚了一会儿,在研究自己的手机为什么连上蓝牙没有声音,然后听排序的下界的时候,就有点懵逼,现在整理归纳一下,做一下记录OneNote 排序下界笔记...原创 2020-03-19 12:46:55 · 424 阅读 · 0 评论 -
算法导论实践——大数乘法(二进制)
算法导论实践——大数乘法(二进制)理论C#实现BigIntegerMultiplicationUtilProgram感觉算法思路很简单,却实现了一个下午,可能还是对代码理解得不够深刻吧,很多地方感觉很冗余,不过好歹实现了,在此记录一下;理论算法的核心是把大数乘法的时间复杂度降到O(nlog3)。在上图中,有递归方程:其中,Theta(n)是2n次方乘积用移位方式实现的结果。可以看出...原创 2020-03-17 18:03:57 · 1167 阅读 · 0 评论 -
算法导论实践——归并排序
算法导论实践——归并排序理论C# 实现这次 你在第几层?理论分解:将数组分成两个解决:分别对两个数组进行归并排序,递归求解合并:将排好序的数组合并起来C# 实现using System;using System.Collections;using System.Collections.Generic;using System.Text;using System.Lin...原创 2020-03-16 14:21:47 · 106 阅读 · 0 评论 -
算法导论实践——快速排序
算法导论实践——快速排序理论C# 实现FastSortUtilProgram在学习算法导论之前,一直对快速排序有很大的畏惧感。还记得当时教我们数据结构的老师就硬给我们讲一堆算法,其中快速排序是真的叫我头疼。当时的感觉就是 我只看到了第一层,老师却在第五层理论分解:依据一个关键值(Pivot),把原数组分解成为两个子数组。其中一个子数组全部元素小于等于Pivot(后文称小数组)在Pivo...原创 2020-03-16 12:59:06 · 157 阅读 · 0 评论