![](https://img-blog.csdnimg.cn/20190913124221172.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
德林恩宝
计算机科学与技术专业研究生,研究方向为计算机视觉[E-mail:baolliu@foxmail.com]
展开
-
多数投票算法(Boyer-Moore Algorithm)详解
转自kimixuchen多数投票算法(Boyer-Moore Algorithm)详解 写在前面:我在刷LeetCode 169 时碰到了这个问题,并且在评论区找到了这个方法,不过我发现CSDN上对其进行解读的博客大多停留在知其然而不知其所以然的层面,所以准备在此做一个较为详细的解读,重点在于介绍其原理。问题描述给定一个无序数组,有n个元素,找出其中的一个多数元素,多数元素出现的次...转载 2020-04-17 20:40:57 · 713 阅读 · 1 评论 -
线性规划网络流问题总结
线性规划问题线性规划可见单纯形算法网络流:源点与汇点的流量和是相等的网络最大流是指在满足容量约束和流量守恒的条件下,在流网络中找到一个净输出最大的网络流求解最大网络流增广路算法主体实流网络和残余网络:实流网络只标记每条边的实际流量,而残余网络中,与网络边同向边是可增量,反向边是实际流量可增广路是一条从源点到汇点的简单路径而求解最大流是在残余网络中找到增广路,然后在...原创 2020-01-30 22:03:58 · 1944 阅读 · 0 评论 -
Isap --最大收益问题
题目描述永乐理工大学的实验室计划了一系列实验项目,这些实验项目需要不同的实验仪器,而配置仪器需要费用,但实验也会产生经济效益。请设计一个算法,如何才能有最大净收益?思路分析模型归纳为二分图匹配模型,假设实验项目为E = {E1,E2,E3,…,Ei},仪器为{I1,I2,I3,…,Ii},那么假设配置仪器的费用使用Ci表示,经济收益用Pi表示,那么,我们利用二分图实现该问题,首先源点与汇...原创 2020-01-29 14:12:30 · 258 阅读 · 0 评论 -
线性规划 --圆桌问题
假期 2020.01.28题目描述有一个国际会议,很多国家需要参加,每一个国家的代表团的人数不一样,每一个会议桌可坐的人数也不一样,为了充分交流,同一个国家的不要做在同一桌上,设计算法实现最佳的座位安排方案。思路解析模型是网络问题,二分图匹配问题。与线性规划 --配对方案问题相似,参考请见该博文代码解析#include<iostream>#include<a...原创 2020-01-28 13:49:20 · 409 阅读 · 0 评论 -
匈牙利算法 -- 匹配问题
假期 2020.01.27匈牙利算法(Hungarian algorithm)介绍核心:寻找增广路径,用增广路径求二分图最大匹配的算法二分图: 二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二...原创 2020-01-27 22:36:08 · 545 阅读 · 0 评论 -
线性规划 --配对方案问题
2020.01.27题目描述某公司存在分工问题,一定数量的女员工与男员工搭配,如何搭配才能实现人员的最大利益,即最大匹配问题。思路解析该问题最初如图,并且存在某些人不能搭配的问题,只考虑能搭配男女之间的搭配其实该问题也相当于一个网络问题,类似容易想到该问题的解决方案,如下图,增加一个源点0和汇点10那么剩下的问题就是如何解决实现的问题,见下一步算法分析;算法分析那么...原创 2020-01-27 11:51:24 · 594 阅读 · 0 评论 -
线性规划--最小费用最大流
假期 2020.01.24题目描述在网络布线的工程中,有许多电缆,而电缆的粗细不同,流量与费用也不一样,那么如何安排才能获得费用最小且流量最大的网络呢?思路分析因为要满足两个条件,那么我们可从两大方面入手:费用最小,我们可以先找到费用最小的网路线,然后在该路径上面增加流量到最大值即可。也可以先寻找最大流量,然后找负值的圈,因为这样子可以在一定程度上减少费用,直到减少到最小即可,...原创 2020-01-26 01:05:57 · 1741 阅读 · 0 评论 -
线性规划--最大网络流
假期 2020.01.24思路分析其实该问题是离散数学中了解到的最大网络流问题,借助最短增广路算法即可解决该问题。而最短增广路算法是代码解析#include<iostream>#include<algorithm>#include<iomanip>#include<queue>using namespace std;...原创 2020-01-24 16:39:19 · 2836 阅读 · 0 评论 -
分支界限法--最优工程布线
#include<iostream>#include<algorithm>#include<queue>using namespace std;constexpr auto Max_size = 100;int map[Max_size][Max_size];//地图int shortest_dist;//最优值struct Position {...原创 2020-01-23 23:55:17 · 792 阅读 · 0 评论 -
分支界限算法--旅行商问题2
假期 2020.01.22题目描述见回溯算法–旅行商问题1算法分析此篇采用分支界限算法解决该问题,相比较前一篇的回溯算法–旅行商问题1,此处使用Bfs搜索加优先队列的方式。设置二维数组存储关系初始化解向量,即选择方案都为零,并且将最优值赋值为无穷定义优先队列:int operator <(const Node& a, const Node& b)//...原创 2020-01-23 00:16:04 · 720 阅读 · 0 评论 -
分支界限法--01背包问题
假期 2020.01.22题目描述仍然是 0 - 1背包问题。详细描述请见回溯算法–01背包问题算法分析此处采用分支界限算法,即bfs算法实现解决该问题,并且采用优先队列的存储方式。存储结构,采用构造函数的目的是便于赋值,并且有两个重载函数,第一个是初始化数组,第二个是便于赋值。struct Node {//每一个节点的信息,其中包括背包的相关信息 int cp, rp;...原创 2020-01-22 14:39:41 · 985 阅读 · 0 评论 -
回溯算法--n皇后问题
假期 2020.01.21题目描述分析见本博主博文图解八皇后问题(递归),此处只提供另一种写法。代码解析#include<iostream>#include<algorithm>using namespace std;const int Max_size = 100;int row_total,line_total;//行,列总数int line_c...原创 2020-01-21 12:03:17 · 283 阅读 · 0 评论 -
回溯算法--地图着色
假期 2020.01.21题目描述有一张地图,如何使得相邻区域颜色不一样,而使用m种颜色将地图全部着色的方案个数。思路分析回溯算法的典型运用算法分析按照回溯算法的思想,我们一开始将节点确定第一一种颜色,然后进行与前面的和该节点相邻节点进行颜色比较,检测是否相同,若相同,就尝试下一种颜色,否则,继续下一个节点的颜色着色。知道所有节点颜色都已着上,那么输出该方案即可。或者请看的本博主...原创 2020-01-21 11:18:18 · 2470 阅读 · 3 评论 -
回溯算法--最大完全子图
假期 2020.01.20题目描述从一个给定的图的关系中,找出其中最大的完全子图。思路分析一句话,回溯就搞定了。如果需要详细分析,请见本博主博文回溯算法–01背包问题,与此问题类似。代码解析#include<iostream>#include<algorithm>using namespace std;#define Max_size 100in...原创 2020-01-20 18:42:50 · 1490 阅读 · 0 评论 -
回溯算法--01背包问题
假期 2020.01.20题目描述0-1背包问题一般描述为:给定n种物品和一个背包。物品i的重量是w(i),其价值为v(i),背包的容量为c。问应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大? 注: 每个物品只能使用一次。思路分析这次分析01背包问题,采用回溯的方法实现。回溯用法简单的来说,回溯就是采用DFS然后加上一个复原的操作,即从初始状态出发,然后按照深度优...原创 2020-01-20 16:53:47 · 4039 阅读 · 1 评论 -
动态规划--最优二叉搜索树
假期 2020.01.19题目描述最优二叉搜索树简单说来,就是使查找的过程消耗的次数最小,即大数据存储与查找方面的较优性能的算法。此处举例数字的存储与查找,如下图:其中pi为搜索概率,qi为不成功概率;思路分析对于寻找最优问题的算法,动态规划一直都是比较好的算法,这儿也是采用动态规划的算法实现该问题的解决。动态规划问题,一般是需要判断问题时候有最优子结构,那么此处设存在序列{s...原创 2020-01-19 18:11:51 · 2180 阅读 · 0 评论 -
0-1背包问题(不可拆分问题)
假期 2020.01.18相关摘要0-1背包问题是一个经典的NP-hard组合优化问题,现实生活中的很多问题都可以以它为模型。本博文从动态规划的角度进行问题的分析,分析了0-1背包问题的数学模型,刻划了最优解的结构特征,建立了求最优值的递归关系式。题目描述0-1背包问题一般描述为:给定n种物品和一个背包。物品i的重量是w(i),其价值为v(i),背包的容量为c。问应该如何选择装入背包...原创 2020-01-18 17:17:38 · 1224 阅读 · 0 评论 -
动态规划--石子合并的拓展问题
假期 2020.01.17题目描述一个圆形操场周围摆放着n堆石子,现要将石子有序的合并成一堆,规定每次只能移动相邻的两堆石子合并,合并花费为新合成的一堆石子的数量,求将这N堆石子合并成一堆的总花费(最小或最大)。与此相似问题求解,请点击了解详情动态规划–石子合并思路解答这个问题其实是挺好理解的,但是如何转化是一个问题。一个圆形的摆放方式很明显是每一堆都是左右有相邻的堆的存在,那么为了...原创 2020-01-17 17:06:26 · 331 阅读 · 0 评论 -
动态规划--石子合并
假期 2020.01.15题目描述沿着一条直线,摆放N堆石子,每一堆的石子的数目不一,规定每次只能移动相邻的两堆石子合并,合并花费为新合成的一堆石子的数量,求将这N堆石子合并成一堆的总花费的最大值以及最小值。问题分析这个问题考虑后,可以有两种方法解决,一种是采用贪心算法解决问题,一种是采取动态规划的问题解决问题,但是经过验证可知,贪心算法并不能准确计算出最大值与最小值,因此,此处采用...原创 2020-01-15 17:07:11 · 494 阅读 · 0 评论 -
动态规划--最优三角部分
凸多边形相关定义凸多边形的三角剖分:将凸多边形分割成互不相交的三角形的弦的集合T。最优剖分:给定凸多边形P,以及定义在由多边形的边和弦组成的三角形上的权函数w。要求确定该凸多边形的三角剖分,使得该三角剖分中诸三角形上权之和为最小。如下图的划分第一幅图:从V3开始的划分,有{v1v3,v3v0,v3v6,v4v6};从V1开始的划分,有{v1v3,v1v4,v4v6,v1v6};这就是两种形式...原创 2020-01-13 14:41:02 · 1109 阅读 · 1 评论 -
leetcode--5080. 查找两棵二叉搜索树之和
题目描述(题目以及图片来源于Leetcode-2019-第 10 场双周赛第二题)给出两棵二叉搜索树,请你从两棵树中各找出一个节点,使得这两个节点的值之和等于目标值Target。如果可以找到返回 True,否则返回 False。输入:root1 = [2,1,4], root2 = [1,0,3], target = 5输出:true解释:2 加 3 和为 5 。输入:root1 ...原创 2020-01-10 14:12:53 · 231 阅读 · 0 评论 -
c语言--线索二叉树
#include<iostream>using namespace std;typedef struct Node *Tree;struct Node { int value; Tree lchild; Tree rchild; int ltag, rtag;};Tree pre;//前驱—全局变量void InordefThreading(Tree &Tr...原创 2020-01-10 12:17:06 · 220 阅读 · 1 评论 -
Power Strings(KMP)
DescriptionGiven two strings a and b we define ab to be their concatenation. For example, if a = “abc” and b = “def” then ab = “abcdef”. If we think of concatenation as multiplication, exponentiation...原创 2019-09-08 10:38:10 · 308 阅读 · 1 评论 -
再续哈夫曼树实现
今天看了趣学算法中的有关哈夫曼树的一个问题,就蛮有兴致再写一次哈夫曼树,但这个算法的实现和我之前的哈夫曼的实现方法略有不同。 声明一下,这个实现我是采纳书上的,觉得还不错,就写了。回顾这个问题是这样描述的:在远距离的信息通信过程和大容量数据存储方面运用比较广泛的数据压缩就是采用哈夫曼编码进行的。如果让我们尝试一次,哈夫曼树应该如何实现呢?回忆一下:哈夫曼树的几个性质,我们要知道,哈夫曼...原创 2019-09-14 20:22:02 · 198 阅读 · 0 评论 -
超大整数的乘法实现---c/c++
前言我们都知道,在在计算机的乘法计算过程中,如果要处理很大的整数,那么计算机硬件是无法表示的,那么,我们就需要考虑将一个大整数分为小整数来进行计算,那么可施行的办法是分解。那么看看如何实现的?示例比如计算3278 x 41926,那么我们可以分解为如下式子:(32 x 102+ 78) x (419 x 102 + 26);其中拆开后得到的32 x 419 x 104+ 78可以分解...原创 2019-09-15 12:37:34 · 1157 阅读 · 0 评论 -
分治算法的复杂度分析
前言这是啥?you see see you,one day day?说起复杂度,我其实现在还不是很会计算时间复杂度,纠结于对算法的实现过程可能有一定的不清楚。但是尽力尝试就行。分治算法,就是把一个大的问题分为很多个形式相同的子问题,把问题规模缩小。假使,最初的问题规模是N,这些小的子问题的个数为a,子问题的规模是n / b,分解或者合并的复杂度表示为f( n ),那么总的时间复杂度就可以...原创 2019-09-15 19:40:11 · 11986 阅读 · 0 评论 -
中序表达式转为后序表达式(c语言)
按照中序表达式与后序表达式的规则借助堆栈进行表示即可(后附详细链接二叉运算树))中序表达式就是我们在数学中见到的中规中矩的表达式,例如3+2-(2*3-7);后序表达式满足运算符号置于数字的后面;在转化的过程中满足的规则:若优先级大于栈顶的运算符,那么把它压入栈‘若优先级小于等于栈顶的运算符,将堆栈中的所有大于等于它的运算符全部输出,并且将该运算符放入堆栈中;若各个对象处理完毕,则...原创 2019-09-03 23:18:40 · 4208 阅读 · 0 评论 -
Period(KMP)
DescriptionFor each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefix is a periodic string. That is, fo...原创 2019-09-08 09:55:57 · 260 阅读 · 0 评论 -
Cyclic Nacklace(kmp)
Problem DescriptionCC always becomes very depressed at the end of this month, he has checked his credit card yesterday, without any surprise, there are only 99.9 yuan left. he is too distressed and t...原创 2019-09-07 23:48:36 · 196 阅读 · 0 评论 -
剪花布条(KMP)
Problem Description一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?Input输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则...原创 2019-09-06 23:36:54 · 197 阅读 · 0 评论 -
Number Sequence(KMP)
Problem DescriptionGiven two sequences of numbers : a[1], a[2], … , a[N], and b[1], b[2], … , b[M] (1 <= M <= 10000, 1 <= N <= 1000000). Your task is to find a number K which make a[K] = ...原创 2019-09-06 18:07:29 · 192 阅读 · 0 评论 -
Seek the Name, Seek the Fame(KMP)
DescriptionThe little cat is so famous, that many couples tramp over hill and dale to Byteland, and asked the little cat to give names to their newly-born babies. They seek the name, and at the same ...原创 2019-09-05 18:54:49 · 476 阅读 · 0 评论 -
畅通工程(Prim算法)
Problem Description省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。Input测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M ( < 100 );随...原创 2019-09-02 20:27:22 · 464 阅读 · 0 评论 -
Oulipo(KMP)
Problem DescriptionThe French author Georges Perec (1936–1982) once wrotea book, La disparition, without the letter ‘e’. He was a member of the Oulipogroup. A quote from the book:Tout avait Pair n...原创 2019-09-05 09:56:34 · 342 阅读 · 0 评论 -
最长的公共子序列究竟有多长?
首先要明白什么是最长的公共子序列:就是按照从前到后的顺序,两个字符串的字符有相同的并且符合前后顺序的就是公共子序列,比如:ABDVFGWBVFG这两个字符串的最大公共子序列就是BVFG;再比如ASDFGHJKADERHTK这两个字符串的最大公共子序列就是ADHK;然后呢,我们考虑实施的办法,单纯的想可以借助什么工具呢?有字符串,还有比较功能,能存数的也只有数组了,一一比较的话,最...原创 2019-09-17 00:51:57 · 195 阅读 · 0 评论 -
相似度?看看到底有多像----编辑距离(c语言)
编辑距离:将一个字符串转变成另一个字符串所需要的最小的编辑操作。该实现的方法和我之前发的最长公共子序列差不多,差别的地方在于:首先,初始化时,第一行与第一列的值不是赋值为零了,表示没有元素相等时到该处的最大的编辑长度;每次左上角,上面,左边,我们是选取最小值,而不是最大值;实现过程:我们采取动态规划的方法,在计算编辑距离的时候,我们可以发现一共就三种情况:string1与st...原创 2019-09-18 00:42:37 · 445 阅读 · 0 评论 -
05-树8 File Transfer(文件传输)--路径压缩
题目描述We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it possible to send a file from any comp...原创 2019-08-02 21:54:13 · 283 阅读 · 0 评论 -
矩阵与矩阵的相关操作(1)
对称矩阵压缩就是取i 和 j中的较大者进行个数计算。压缩后的一维数组大小为 n * ( n + 1 ) / 2;一维数组中的矩阵转置在n * n的矩阵中,表示两个对称点是:( i 表示行,j 表示列)num[ i * n + j ] 与 num[ j * n + i ];如果这个对称矩阵已经被表示为一维数组存储num[ n * n],那么我们如何在一维数组中进行转置的...原创 2019-10-10 16:15:52 · 510 阅读 · 0 评论 -
全排列 2
题目描述给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]思路分析:#include<iostream>#include<algorithm>#include<cstring>using namespace std;#define Maxsiz...原创 2019-10-03 13:59:33 · 386 阅读 · 0 评论 -
全排列 1
题目描述(来源:力扣(LeetCode))给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]思路解答典型的DFS或者回溯算法的运用,也类似于八皇后问题代码详解#include<iostream>#include<...原创 2019-10-03 11:40:17 · 222 阅读 · 0 评论