算法
文章平均质量分 62
perry0528
这个作者很懒,什么都没留下…
展开
-
KMP算法介绍(字符串的模式匹配算法)
朴素算法该算法的思路是设置两个i, j指针,依次遍历不等则回溯算法思路简单但时间复杂度高达o(length1 * length2)算法比较简单,因此直接看实现:int Index(string S, string T) { int len1 = S.length(); int len2 = T.length(); int i =...原创 2018-08-25 21:25:47 · 155 阅读 · 0 评论 -
数据结构 || 图中两点间的最短路径(弗洛伊德算法)
原理讲解参考:https://www.cnblogs.com/wangyuliang/p/9216365.html代码实现:#include <iostream>#include <limits.h>#include <string>#include <vector>#include <iomanip>using names...原创 2019-01-25 15:47:09 · 1437 阅读 · 0 评论 -
图的最小生成树 || Prim算法和Kruskal算法的c++实现
Prim算法和Kruskal都是典型的贪心算法,也就是在求解最小生成树时,我们总是不从全局考虑,而每次仅仅是考虑局部最优解。下面的算法都基于无向图的邻接多重表。Prim算法:算法描述:基本步骤:设R是有n个定点的对称连通关系。1)选取R的一个定点v1,设V = {v1}, E={}。2)选取与vj ∈ V邻接的V的最近邻元vi, 并且边(vi, vj)不与E中元素形成回路。添加vi到...原创 2019-01-23 01:42:25 · 1779 阅读 · 0 评论 -
数据结构 || 求连通图的关节点
对图的存储结构基于无向图的邻接多重表。关节点和重连通图:假若在删去顶点v以及v相关联的各边之后,将图的一个连通分量分割成两个或两个以上的连通分量,则称顶点v为该图的一个关节点。如果没有关节点的连通图则称为重连通图(双连通图)。算法实现:1. 方法一:最简单也是最直接的算法是,删除一个点然后判断连通性,如果删除此点,图不再连通,则此点是关节点,反之不是关节点(图的连通性一般通过深搜来判定...原创 2019-01-23 15:06:21 · 2981 阅读 · 0 评论 -
算法 || 快速排序的c++实现
快速排序的思想:设置两个左右哨兵,每次取最左边的数作为基准数,然后先移动右哨兵,找出第一个比基准数小的数;之后然后移动左哨兵,找到第一个比基准数大的数,此时交换两个哨兵指向的数,然后继续移动重复上述过程,直到两个哨兵重合,交换基准数与哨兵指向的数。再接着对基准数的左右两边分别重复上述过程(可用递归实现)。具体过程可参考博客:https://blog.csdn.net/adusts/articl...原创 2019-03-19 18:09:35 · 127 阅读 · 0 评论 -
数据结构 || 次优查找树的c++实现
参考严蔚敏老师的数据结构(c语言版),并用c++加以实现//// main.cpp// Search_Optimal//// Created by peiyu wang on 2019/3/19.// Copyright © 2019 peiyu wang. All rights reserved.//#include <iostream>#includ...原创 2019-03-19 23:18:05 · 275 阅读 · 0 评论 -
动态查找表 || 二叉排序树的c++实现
二叉排序树的特性:若左子树不空,左子树上所有结点的值均小于它的根结点值。若右子树不空,右子树上所有结点的值均大于它的根结点值。左右子树分别为二叉排序树。删除算法:被删除的结点是叶子结点。被删除的结点只有左子树或有右子树。被删除的结点既有左子树又有右子树。对于第三种我们选择删除结点的左子树的最右结点。查找性能的分析:(平均查找长度)不同树的平均查找长度不同,即使是相同序...原创 2019-03-21 17:02:05 · 416 阅读 · 0 评论 -
动态查找树 || 平衡二叉树的c++实现
在满足二叉查找树的特性上,还要满足左右子树深度之差绝对值不大于1。构造方法:插入过程中,采用平衡旋转技术获得。原创 2019-03-22 12:58:31 · 353 阅读 · 0 评论 -
动态查找树 || B-树的c++实现
B-树是一棵平衡的多路查找树,它在文件系统中很有用。一棵m阶的B-树或为空树或为满足以下特性的m叉树:树中的每个结点至多有m棵子树。若根结点不是叶子结点,则至少有两颗子树。除根结点外的所有非终端结点至少有Ceiling(m/2)(向上取整)棵子树所有的非终端结点中包含下列信息数据:(n, A0, K1, A1, K2, A2, … , Kn, An)n表示有n个结点...原创 2019-03-26 13:04:32 · 480 阅读 · 0 评论 -
算法 || c++实现各种经典内部排序
经典的排序算法如下:插入排序直接插入排序折半插入排序希尔排序交换排序冒泡排序鸡尾酒排序(双向冒泡)快速排序选择排序简单选择排序堆排序归并排序基数排序 / 桶排序代码实现://// main.cpp// sort//// Created by peiyu wang on 2019/3/28.// Copyright © 2019 ...原创 2019-03-29 18:28:09 · 204 阅读 · 0 评论 -
计算机图形学 || Bresenham算法画三角形边框以及圆形并用栅格化对其进行填充
Bresenham算法在进行直线的扫描转换时,由于不涉及浮点数运算,只是整数类型的运算,所以大大提高了计算速率。Basic:1. 使用Bresenham算法(只使用integer arithmetic)画一个三角形边框:input为三个2D点;output三条直线(要 求图元只能用 GL_POINTS ,不能使用其他,比如 GL_LINES 等)。Bresenham画直线的算法主要步骤是判断...原创 2019-03-27 13:40:08 · 4145 阅读 · 0 评论 -
动态查找树 || 键树的c++实现(双链树)
概念:键树又称为数字查找树,树中的每个结点中不是包含一个或几个关键字,而是只含有组成关键字的符号。例如,若关键字为数值,则结点中只包含一个数位;若关键字为单词,则结点中只包含一个字母字符。这种树会给某种类型关键字的表的查找带来方便。举例:{CAI,CAO,LI,LAN,CHA,CHANG,WEN,CHAO,YUN,YANG,LONG,WANG,ZHAO,LIU,WU,CHEN}我们先针对首...原创 2019-03-27 15:06:58 · 493 阅读 · 1 评论 -
外部排序 || c++实现多路归并的败者树算法
算法概念:如果我们要对大规模文件进行排序,不能一次装入内存中,只能从外存一次次读取分别排序,而外存的IO时间复杂度很高,所以我们应该尽量减少针对外存读写的次数。如果我们只是简单地进行二路归并的话,归并路数越少归并的次数就越多,每次归并都要进行一次IO操作。所以我们考虑尽量进行多路归并,而多路归并不同于简单地二次归并只需对两组数进行指针移动归并,为了降低多路归并中归并的时间复杂度。我们考虑使用...原创 2019-04-01 17:33:30 · 1713 阅读 · 1 评论 -
数据结构 || 图中两点的最短路径(迪杰斯特拉算法)
从某个顶点出发到其他所有各点的最短路径迪杰斯特拉算法数据结构采用有向图的邻接矩阵存储。算法基本思想:依路径长度递增的次序来求各个路径。长度最短的路径一定是一条从源点直达的弧。其他长度的路径求原点到其最短路径一定是以下两种情况之一:源点到此点一条直通弧。前面已经求得的最短路径中的其他顶点中到它的直通弧。代码实现:#include <iostream>#inc...原创 2019-01-24 13:22:27 · 2959 阅读 · 0 评论 -
C | 二叉树的创建销毁遍历,计算叶子数,深度以及对二叉树进行拷贝等基本操作
二叉树是一块比较重要的知识点,而且是从线性结构到树形结构的一个跨越,建议大家动手实现以下。树是递归算法最好的应用,当然不嫌麻烦的话也可以用栈。前序遍历初始化树:void InitializeTree(Tree *T) { char ch; scanf("%c",&amp;ch); if (ch == '*') { (*T) = NULL...原创 2018-09-08 01:26:17 · 339 阅读 · 0 评论 -
C 线索化二叉树的实现
n个结点一定有n+1个指针域是空的如果结点左指针为空则作为前驱指针若右指针为空则作为后继指针指向线索序列的前序后继指针即为线索同时为了区分指针是作为线索指向前驱后继还是指向子树,我们约定设置一个标志位,若为0指向子树,为1作为线索每个节点除原来的数据域以及左右子孩子节点指针外,还需要增加两个标志域 lchild L.Tag data R.Tag rchil...原创 2018-09-08 01:39:03 · 208 阅读 · 0 评论 -
C++ | Tree的实现(适用于一般的树)
其实主要是采用类似c这种面向过程的语言的接口实现办法,用c++更多只是为了调用队列,栈等一些接口网上资料大部分树的实现都是二叉树,而实际常见的树一般是普通的树所以我们要学会通过二叉树的思想来转换到普通的树来使用本文采用的存储结构为(孩子-兄弟)结点表示法,也叫二叉链表,有不懂得地方可以查看我的另外一篇关于树的存储结构的文章本文重点讨论三个函数,其他实现函数都大同小异 求树的深度打印树...原创 2018-09-11 11:32:13 · 26350 阅读 · 1 评论 -
树的常见的三种链表存储结构
1.双亲表示法:// - - - - - 树的双亲表存储表示 - - - - -#define MAX_TREE_SIZE 100typedef struct PTNode { //结点结构 ElemType data; int parent; //双亲位置域}PTNode;typedef struct { //树结构 PTNode nodes[MAX_TR...原创 2018-09-08 11:16:11 · 7896 阅读 · 2 评论 -
C//C++ 二叉树的遍历递归与非递归的实现
有句话说得好,一切递归皆可用栈来实现。关键是理解好递归以及栈的基本原理。这里以最为典型的中序遍历为例,其他的实现类似直接调用c++STL中的stack树的知识点用到大量的递归知识,建议大家不太理解的去找一下典型二叉树的例子然后一一步的去遍历尝试一下算法数据结构:typedef char ElemType;typedef struct BiTNode { ElemT...原创 2018-09-06 01:24:47 · 282 阅读 · 0 评论 -
c//c++二叉树的层序遍历
层序遍历即从一棵树的每一层由上到下开始依次从左到右遍历输出从上面一句话的原理不难看出这就是一个FIFO算法,也就是一个基本的先进先出队列,因此我们考虑调用STL的queue数据结构:typedef struct BiTNode { ElemType data; struct BiTNode *lchild, *rchild;} Node, *Tree;算法:...原创 2018-09-06 01:32:36 · 3398 阅读 · 0 评论 -
稀疏矩阵的实现
主要实现的难点在于稀疏矩阵的转置以及矩阵乘法。对用到的数据结构定义不懂的可参考严蔚敏老师的数据结构书籍,这里讲严老师讲的两种数据结构三元组结构 和行逻辑结构 整合到一起。稀疏矩阵是线性结构中比较难的一块知识点,不懂的建议去b站看看严老师的视频。实现环境:linux数据结构typedef struct { int i, j; //行坐标,列坐标 Elem e...原创 2018-09-03 23:42:34 · 706 阅读 · 0 评论 -
C || 哈夫曼树及哈夫曼编码的实现
代码带有注释,不详细解释,检测采用严蔚敏老师数据结构的一个范例HuffmanCode.h#ifndef _HUFFMANCODE_H_#define _HUFFMANCODE_H_#include <stdbool.h>typedef struct { unsigned int weight; unsigned int parent, lchild, rchild;...原创 2018-09-18 11:26:16 · 729 阅读 · 0 评论 -
C || 图的遍历
图的深度遍历和广度遍历基于的数据结构是图的邻接表结构,详细可以看上一章节(图的存储结构)深度遍历:bool visited[100]; //用于表示节点是否被访问的标志位void DFS(Graph G, VertexType v) { visited[v] = 1; printf("%d\n",v); ArcNode *e = G.vertices[v].first; w...原创 2018-09-25 21:17:37 · 937 阅读 · 0 评论 -
C || 图的四种存储结构实现
1. 数组表示法:#include &amp;amp;lt;stdio.h&amp;amp;gt;#include &amp;amp;lt;limits.h&amp;amp;gt;#define INFINITY INT_MAX#define Maxvex 100typedef struct graph { int vexs[Maxvex+1]; //顶点 int AdjMatrix[Maxvex+1][Maxvex+1];原创 2018-09-21 21:00:26 · 2210 阅读 · 0 评论 -
计算机视觉 || Canny算子实现边缘分割并进一步处理
Ex2:用 CImg 重写、封装给定的 Canny 代码,并测试附件有三个Canny相关的Code以及测试数据若干(测试数据自己转化成BMP图像);同学按照各自学号最末尾的数字除 3 取余数,余数为 0 的改写 Code0,余数为 1的改写 Code1,余数为 2 的改写 Code2;封装要求:(1)所有的图像读写、数据处理只能用 CImg 库(整个工程文件不允许使用 Opencv ...原创 2018-10-19 21:31:24 · 2462 阅读 · 0 评论 -
计算机网络 || 自定义协议实现点对点大文件传输
这一部分其实就是实现客户端与服务端的一个大文件的传输,因为题目要求是只需要自定义应用层协议,所以本项目是基于TCP(传输层)协议下实现的。采用的是python的struct模块对传输信息进行打包以便应对不同类型的传输文件,同时可以转为用于传输的byte类型。针对大文件的传输开始是想直接用动态分配内存给文件传输分配一个大容量的堆作为缓冲区,但感觉这样就违背了本题的意思而且对于文件传输的效率不高,...原创 2018-11-20 23:33:14 · 1922 阅读 · 0 评论 -
查找 || 哈希表的c++实现
哈希表的构造方法:直接定址法数字分析法平方取中法折叠法除留余数法随机数法处理冲突的方法:开放地址法线性探测再散列二次探测再散列伪随机探测再散列再哈希法链地址法建立一个公共溢出区装填因子:平均查找长度ASL跟哈希表构造方法和处理冲突的方法都有关。一般情况下,处理冲突方法相同的哈希表,其平均查找长度依赖于哈希表的装填因子:α=表中填入的记录数哈希表的长度...原创 2019-03-28 17:17:49 · 1049 阅读 · 0 评论