数据结构和算法
文章平均质量分 51
satadriver
唯有强大才能救赎。
生而有翼,为何你竟愿一生匍匐前进,形如虫蚁?
当家作主, 不屈从于控制, 不证明自己。
展开
-
CRC校验
3 CRC校验的实现过程是,接收端利用收发双方约定的已知的模数,对接收到的数据和校验码进行模2运算,若传输无错误,其余数必须为0。1 CRC校验一般只有验证功能而无纠错功能。2 CRC校验的数学原理是模2运算。原创 2023-03-16 19:11:07 · 428 阅读 · 0 评论 -
循环赛算法
【代码】循环赛算法。原创 2024-04-20 22:49:10 · 190 阅读 · 0 评论 -
矩阵连乘算法
【代码】矩阵连乘算法。原创 2024-04-20 22:44:33 · 245 阅读 · 0 评论 -
LFU和LRU的区别
看图:原创 2024-03-03 23:16:49 · 409 阅读 · 0 评论 -
AES源码(基于C语言)
整个加解密过程还未完全理解,暂时留个记号,以后有机会再慢慢体会。代码如下:#pragma once#define uint32_t unsigned int#define uint8_t unsigned charint aesTest();#pragma pack(1)typedef struct { uint32_t eK[44], dK[44]; // encKey, decKey int Nr; // 10 rounds}AesKey;#pragm原创 2024-01-04 11:28:06 · 552 阅读 · 0 评论 -
DES源码(基于C语言)
整个加解密过程还未完全理解,暂时留个记号,以后有机会再慢慢体会。原创 2024-01-04 11:21:15 · 981 阅读 · 0 评论 -
RC4算法解析
RC4是由RSA Security的罗纳德·李维斯特在1987年开发出来的,虽然它的官方名是“Rivest Cipher 4”,但是首字母缩写RC也可以理解为"Ron’s Code"。原创 2024-01-04 01:08:12 · 1174 阅读 · 0 评论 -
搜索算法的程序框架
【代码】搜索算法的程序框架。原创 2024-01-02 14:50:07 · 380 阅读 · 0 评论 -
0-1 knappack(0-1背包问题)
【代码】0-1 knappack(0-1背包问题)原创 2024-01-02 13:15:17 · 403 阅读 · 0 评论 -
三个算法题之---bjtu算法期末小测验
【代码】三个算法题之---bjtu算法期末小测验。原创 2024-01-01 16:22:14 · 484 阅读 · 0 评论 -
并查集代码
【代码】并查集代码。原创 2024-01-01 13:36:55 · 382 阅读 · 0 评论 -
Dijkstra和Prim算法
在实现上,两者的思路基本一致,都要维护一个最短路径数组。所不同的是,Prim算法每次更新时,是将S集合中所有的顶点看作一个顶点A,计算的V-S 集合中顶点和顶点A的距离,而Dijkstra 是计算的起始点和新加入顶点的距离。,然后从剩下的顶点集合V-S中寻找如下条件的最短的边:该边的一个顶点位于集合S,一个顶点位于集合V-S,这样一直循环直到所有的顶点V都在S中。而Prim算法是在所有的边中寻找最短的边,同时如果该边的两个顶点都不在S中,就加入集合S,然后继续寻找其他的边,知道所有的顶点V都在集合S中。原创 2023-12-31 22:04:33 · 489 阅读 · 0 评论 -
平衡二叉树
AVL简称平衡二叉树,又简写为BBST,前苏联的数学家 Adelse-Velskil 和 Landis 在 1962 年提出高度平衡的二叉树。将17,9,2,12,14,26,33,15,40,23,25一次插入到一颗初始化为空的AVL树中,画出该二叉平衡树。原创 2023-12-06 20:39:41 · 509 阅读 · 0 评论 -
数据结构的一些结论
B−22m22m2B+nn1log2n1−1nn1logϕ5n1−2log2m2n11。原创 2023-12-05 17:11:59 · 841 阅读 · 0 评论 -
一次算法考试的反思
但是提交后没有得分,一直报"compile error"和"runtime error",导致我一直以为是考试系统的问题,所以还跟管理员沟通撕扯了半天,问系统有没有跟Windows的源码风格兼容。虽然冒泡排序是落后的算法,但时间复杂度表示的是算法在最坏情况下的时间复杂度,冒泡排序必然会觉得我侮辱了她。无奈提交后,立马得到一个成绩"F",这时老师又开始补刀说,这次考试占这门课的毕业成绩的分量很重,我更是又急又气。我上面的代码错误在于,导致每次排序后,i递增j也跟着递增,导致i前面的数字被遗漏了。原创 2023-11-05 09:45:26 · 195 阅读 · 2 评论 -
master theorem公式推导
后面的部分容易理解,将T(n)带入T(n-1), T(n-1)带入T(n-2),…,才发现自己没写错,定理里面的写法和自己写的一样。但是第一项一直没看懂自己哪里错了。原创 2023-10-22 15:09:57 · 375 阅读 · 0 评论 -
PCA数学原理和非负矩阵分解
于剑老师的教课书太难懂,"PCA主成因分析"这段实在看不懂,还是参考其他老师的文章才基本看懂。原创 2023-10-21 11:07:53 · 165 阅读 · 0 评论 -
归并排序的复杂度
根据递归方程求解:Tn2T2n2nT2n2T4n22nT4n2T8n24nT8n2T16n28n...T11考虑:log2n2n2n2n..2nlog2n2nlog2nnlog2n。原创 2023-10-15 00:28:18 · 200 阅读 · 0 评论 -
KMP算法的理解
比如字符串"abaabcac"的next数组为:111223121。至于改进的next数组,情况将会更加复杂,暂不赘述。原创 2023-10-11 23:14:46 · 188 阅读 · 0 评论 -
枚举算法的二分法
如果从它们中切割出 K 条长度相同的绳子,这 K 条绳子每条最长能有多长?答案保留到小数点后 2 位。有 N 条绳子,它们的长度分别为。原创 2023-09-24 16:30:06 · 109 阅读 · 0 评论 -
矩阵乘法和转置
【代码】矩阵乘法的实现。原创 2023-08-27 19:58:52 · 73 阅读 · 0 评论 -
二叉树的实现
自己半路出家做软件开发不知不觉也超过了10年,其中接触过软件开发、windows驱动、安全研究、逆向、漏洞挖掘等业务,一路走来跌跌撞撞,目前感觉自己仍然比较菜,一直处于绿叶和菜心的位置。再加上平时面临KPI考核、生活琐事的羁绊,技术一直无法快速迭代和发展进步。最近又面临岗位调整,实在是很难静下心来,排除一切世俗世界,深入的研究数据结构和算法。本程序跟栈、队列、list、图等其他数据结构的实现一样简单,包括二叉树的插入(如果已经有相同的键值则不插入)、查找、删除、中序遍历等几个模块。原创 2023-08-24 11:15:22 · 110 阅读 · 0 评论 -
图的广度遍历和深度遍历实现
【代码】图的广度遍历和深度遍历实现。原创 2023-08-23 21:55:27 · 128 阅读 · 0 评论 -
循环队列实现
【代码】循环队列实现。原创 2023-08-23 17:49:43 · 82 阅读 · 0 评论 -
栈结构的实现
【代码】栈结构的实现。原创 2023-08-23 17:46:34 · 94 阅读 · 0 评论 -
链表的实现
分两种方式实现,一种是双向链表,一种是双向循环链表。循环双向链表和双向链表的编码实现,差别很小,但是循环链表在效率上胜出很多,综合考虑,循环链表是首选。原创 2023-08-23 17:44:11 · 513 阅读 · 0 评论 -
LZSS(LZ77)压缩
我自己写的代码,好像有点问题,不想再纠结了,事情太多了,先放下吧。原创 2023-05-06 10:36:16 · 339 阅读 · 0 评论 -
不借助第三方,如何交换两个变量的值?
非说不多说,看图:原创 2023-08-22 14:18:47 · 184 阅读 · 0 评论 -
关于伪随机数的实现
经测试,发现大部分数字的长度是9或者10位的,很少有少于7位数字的。可能是因为10^7 / 2 ^ 32= 1/4000的缘故吧,概率太小了。随机数的产生思路一般有两种,一种是等概率线性概率密度,一种是正态分布的概率密度。x2 = (a * x1) % m,其中a = 7^5,m= 2 ^32 - 1。这里主要是了解线性同余法的概念和乘同余法。原创 2023-05-06 14:19:12 · 89 阅读 · 0 评论 -
KMP算法
【代码】KMP算法。原创 2023-08-22 13:43:32 · 65 阅读 · 0 评论 -
crc16校验
【代码】crc16校验。原创 2023-08-22 13:37:56 · 86 阅读 · 0 评论 -
二分查找和fibonacci查找
【代码】二分查找和fibonacci查找。原创 2023-08-22 13:36:49 · 137 阅读 · 0 评论 -
几种常见的递归算法
提供2个函数,都差不多,当然,其中有一个是我写的。hannoi的时间复杂度是。这个比较简单就不说了。原创 2023-08-22 13:21:29 · 94 阅读 · 0 评论 -
排序算法合集
这些排序函数都是自己零零散散写的,也没有经过深思熟虑和优化,纯粹是为了自娱自乐。代码里有两种实现方式,感觉第二种比较正宗,第一种跟插入排序相似度很高。本人没有完整的计算机科班的教育经历,但是一直在兢兢业业,努力学习。此处可以看出,插入排序和冒泡排序还是有很大的不同。按照次序,每次挑选一个最小的,放到相应的次序位置。快速排序一种是本人自己写的,一种是算法书上的源码。快速排序是冒泡排序的1000倍。原创 2023-08-22 12:19:29 · 479 阅读 · 0 评论 -
斐波那契通项公式
斐波那契通项公式原创 2023-02-25 17:12:13 · 97 阅读 · 0 评论 -
斐波那契数列求和
斐波那契数列求和原创 2023-02-25 17:18:35 · 98 阅读 · 0 评论 -
经典组合优化问题
此处要理解"each pair of which is connected by an edge"的含义,这里的which指的是谁呢?肯定是vertices,即每一对定点都有一条边连接起来。本文根据学习进度不定时更新。团问题是NPC问题。原创 2023-08-20 23:17:32 · 149 阅读 · 0 评论 -
欧拉回路和路径
对于任意一个节点(包括起点),进入该节点需要“消耗”一条边,而离开该节点需要“消耗”另一条边。因此,该节点的度数必须为偶数,才能保证我们不被“困在”该节点中。从图的一个节点出发,每条边恰好经过一次,并回到起点,则称该路径为。若经过每条边恰好一次,不回到起点,则称该路径为。注意:若一条边的两端是同一个节点则度为2。无向图中存在欧拉回路的判定条件。每个节点的度数均为偶数。原创 2023-08-19 22:26:20 · 184 阅读 · 0 评论 -
判断链表中是否有环
如下图,如何判断链表中存在环路呢?原创 2023-08-19 11:02:25 · 154 阅读 · 0 评论 -
计算复杂度基础
注意:描述中,I的缩写是Instance,S的缩写是Solution。一个抽象问题使用不同的编码可以被转换为不同的具体问题。将一个优化问题转换为决策问题后,不会变的更难。intersection: 交集。抽象问题包括决策问题和优化问题。complement: 补集。原创 2023-08-19 09:02:02 · 196 阅读 · 0 评论