Algorithm
文章平均质量分 81
Zerg Wang
这个作者很懒,什么都没留下…
展开
-
简单高效的字符串匹配算法
简单高效的字符串匹配算法原创 2023-02-01 16:09:17 · 648 阅读 · 1 评论 -
快速排序及其变体
快速排序及其变体原创 2022-12-06 17:57:15 · 572 阅读 · 0 评论 -
堆的性质与应用
堆的性质与应用原创 2022-09-16 18:59:20 · 444 阅读 · 0 评论 -
最小生成树
最小生成树,即Minimum Spanning Tree,简称MST。问题引入一个有n个节点m条边(m>=n)且边有权值的无向图,它的最小生成树就是在所有边中选出n-1条边组成一棵树,且所选边的权值和最小。拿实际问题来举例。假如有n个地点,现在要修路将这n个地点相互连通,每条路连通两个地点,但不同的路造价不一样。问如何修路,使得所有地点都能连通,但路的造价最低。Kruskal算法首先假设所有的边均未被选择,然后将所有的边按权值从小到大排序,并从权值最小的边开始逐个边检验:若该边加入到图中后原创 2022-04-27 17:22:09 · 407 阅读 · 0 评论 -
并查集算法
引入并查集(disjoint-set data structure,或union–find data structure)是一种树型数据结构,用于处理互相不相交的集合中元素的查询与合并。举个例子,现在有n个相互独立的点和m条线,首先读入n和m,接下来m行每行读入x,y,代表点x与点y相连。这些点通过线相互连接,可能构成一张或多张图,最后问共构成几张互不连通的无向图或者任意两节点是否连通。样例读入:5 31 33 24 5由样例读入可得,1、2、3构原创 2022-03-15 15:29:12 · 6979 阅读 · 2 评论 -
一笔画问题(欧拉回路)
前言问题引入给出一个有n个节点和m条边的图(可以是无向图也可以是有向图),要求遍历图中所有的边,但每条边只能访问一次。输出符合要求的走法。证明该问题最早可追溯到欧拉的七桥问题:对于下图中的七座桥,每座桥只经过一次,如何一次把七座桥都走一遍。如果将河中间的两地以及两岸这一共四个地方抽象成四个点,那么七桥问题可以转换成如何一笔画完上面的这幅无向图。欧拉证明:若一幅无向图中,度为奇数的点的数量为0或者2,该无向图可一笔画完,否则画不完。(点的度数等于与该点相连的边数)若一幅有向图中,每个点的出原创 2022-01-28 16:42:04 · 4712 阅读 · 1 评论 -
拓扑排序(Topological Sort)
问题引入现实生活中我们遇到的要处理的事情可能要讲究先后顺序,比如说要先穿好衬衫才能穿外套,再比如说一个计算机系的学生想修完所有课程:面对这样一张图,如何求出做事的顺序?这时需要拓扑排序:将事件视为点,先后关系视为边,则可以把“先做事件2,再做事件1”抽象成:2→1,同理可将上面的课表变成一副有向图:拓扑排序算法拓扑排序就是通过以上这种有向图来获知这一系列事情的先后顺序。算法的主要步骤有:首先找一个入度为零的点(入度为零表示没有点指向该点,说明做该点代表的事没有前提,找不到说明该图是一个环原创 2021-12-24 19:42:59 · 1286 阅读 · 0 评论 -
二叉搜索树及AVL
二叉搜索树(Binary Search Tree)又称二叉排序树,对于此树中的任一节点,其左子树所有节点的值都比该节点小,其右子树所有节点都比该节点大。因此,该树的中序遍历会得到一个有序序列。平衡二叉搜索树B树B+树红黑树...原创 2021-11-30 14:09:32 · 674 阅读 · 0 评论 -
归并排序及其变体
一般指二路归并排序,是稳定排序原创 2019-10-16 20:05:32 · 1201 阅读 · 0 评论 -
栈及其变体
栈及其变体原创 2019-04-22 17:33:30 · 1511 阅读 · 1 评论 -
快速傅里叶变换(Fast Fourier Transformation)
1.问题引入当两个多项式f(x)、g(x)相乘时,最直接的解决方法是:枚举f(x)的每一项,与g(x)的每一项分别相乘,再合并同类项,时间复杂度为O(n^2)。实际上,我们可以使用快速傅里叶变换,将时间复杂度优化至O(n*log2n)。2.背景知识1.点值表示法对于一个有n项的多项式,既可以使用n个系数来表示它(这n个系数可表示唯一多项式):f(x)={a0,a1,a2,....原创 2019-10-04 13:33:13 · 1576 阅读 · 0 评论 -
质数相关算法及优化
1.时间优化思路来源:MoreWindows的博客,原文地址:http://blog.csdn.net/morewindows/article/details/7347459在利用素数筛除合数的时候,我们发现大量合数会被重复筛去(例如,合数10是2和5的倍数,会在i=2和5的时候各被筛一次),因此我们要减少合数的重复访问。在寻找素数的时候,可以单独用一个数组记录素数,该数组是为素数表。...原创 2018-12-16 14:05:51 · 516 阅读 · 1 评论