- 博客(21)
- 资源 (2)
- 问答 (10)
- 收藏
- 关注
转载 BM算法详解
Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:http://www.searchtb.com/2011/07/%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8C%B9%E9%85%8D%E9%82%A3%E4%BA%
2016-05-21 16:27:11 2950
转载 字符串匹配的BM算法讲解(不含代码)
上一篇文章,我介绍了KMP算法。但是,它并不是效率最高的算法,实际采用并不多。各种文本编辑器的"查找"功能(Ctrl+F),大多采用Boyer-Moore算法。Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了这种算法。下面,我根据Moore教授自己的例子来解释这种算
2016-05-21 16:05:20 364
原创 KMP算法简单实现
上期数据结构专栏中我分享了大神的对KMP算法的讲解but talk is cheap,show me the code我分享我的简单代码#include"iostream"#include"cstdio"#include"cstring"using namespace std;char part[100];char impo[100];int next[100];v
2016-05-20 13:20:11 643 2
转载 KMP算法 串的模式匹配算法优秀总结
转载大神的博客受益匪浅这几天学习kmp算法,解决字符串的匹配问题,开始的时候都是用到BF算法,(BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。)虽然
2016-05-20 12:21:14 4913
原创 离散数学 求偏序集极大极小元第三种思路 假链式前向星
链式前向星存储点集的关系#include"iostream"#include"cstdio"#include"cstdlib"#include"cstring"using namespace std;int first[30];int nextk[30];int num=0;int charp[30];int agminest[30];int maxest[30];in
2016-05-19 22:13:10 1476
原创 离散数学 求偏序关系极大极小元的两种思路
1.传递闭包#include"iostream"#include"cstdio"#include"cstdlib"#include"algorithm"using namespace std;int minest[30];int maxest[30];int charnum[30];int num=0;int minnum=0;int maxnum=0;int jie
2016-05-19 16:03:15 3150 1
原创 HDU2141 真:自己源码
我的AC代码#include"iostream"#include"cstdio"#include"cstdlib"using namespace std;int a[505],b[505],c[505],ab[250005];int l,m,n,s;int num=0;int countk=0;bool judge(int sum){ int left=1; int
2016-05-16 22:14:25 628 1
原创 HDU2141 二分查找
在讲解题目之前先复习一下qsort函数,因为二分法针对的是有序表,所以经常要涉及到排序,在比赛中,我们时经常要用到排序函数的qsort函数,原谅我无耻的粘贴功 能: 使用快速排序例程进行排序头文件:stdlib.h用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,con
2016-05-16 22:08:06 316
原创 HDU1597二分查找
HDU1597首先这道题的思路是二分查找我们先开一个数组sto,sto[i]用来记录Si之前(包括Si)的总共的数字的个数,一个for循环即可实现然后我们根据输入的n在sto[i]区间的对比情况就可以判断出n所在对应的S的下标然后剩下都就是取余运算就可以了二分法思想简单,但是判断辩解是十分困难的,参考了网上大神们的建议,我总结了一下相对好理解的边界判定情况1
2016-05-16 17:03:48 416
原创 二分插入排序
二分插入排序也是一种插入排序,原理和插入排序是一样的,但是之所以二分是快速查找出要插入的位置下面附上代码和图示解析#include"iostream"#include"cstdio"using namespace std;int a[]={0,12,324,5,6768,78,79,7};int length=0;int main(){ length=sizeof
2016-05-16 13:51:32 442
转载 二分查找小总结
1、二分查找(Binary Search) 二分查找又称折半查找,它是一种效率较高的查找方法。 二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。不妨设有序表是递增有序的。2、二分查找的基本思想 二分查找的基本思想是:(设R[low..high]是当前的查找区间) (1)首先确定该区间的中点位置:
2016-05-14 11:53:12 1055
原创 最大子数组 两个经典解法(动态规划,分治法)
最大子数组:数组中子序列和最大的子数组的和求解1.分治法:将问题的分割分成三部分进行考虑leftsum,rightsum和crosssum进行综合考虑分治法代码:#include"iostream"#include"cstdio"using namespace std;int a[] = {0, 13, -3, -25, 20, -3, -16, -23, 18, 20, -
2016-05-14 11:35:36 410
原创 阶梯问题 动态规划浅析
有一个台阶,我们每次只能一次上一个或者一次上两个台阶,请问到第n个台阶有几种走法动态规划:首先我们将问题规模进行缩小,直到最后两节台阶,第一节台阶只有一种走法,第二节台阶有两种走法每一节台阶可以看做有前一个台阶走一步到的,和前两个台阶走两步到的,所以是前面两者的和所以:状态转移方程也就很好描述了dp数组记录到第i阶台阶可以的方法下面附上代码及解析#include"ios
2016-05-14 10:21:58 1514 1
原创 动态规划 中级题解 路径记录
对于上一篇的记录路径的问题,达神教我可以再开一个二维数组进行路径记录,最后用栈进行输出格式调整首先再码一遍那个收集苹果的二维动态规划问题#include"iostream"#include"cstdio"#include"cstdlib" using namespace std;struct node{int x,y;};typedef st
2016-05-13 18:06:51 946
原创 动态规划中级题解
二维的动态规划解决题目:假设在一个N*M的平面上,有N*M个格子,每个格子中都有一定数量的苹果,每次我们只能从某个格子处向右或者向下走,注意不能超过地图的限制,请问如何设计路径才可以保证最后从起点到终点后获得的苹果数量最多动态规划解析:建立二维的dp数组dp[i][j]表示走到map[i][j]格的时候能够获得的最多的苹果数目最后将问题进行分解,不断缩小规模,直到dp[startx][
2016-05-13 12:59:40 377
原创 动态规划初级题解
1.在这里我们先首先声明一下什么是最大上升子序列,因为在自学过程中被莫名奇妙的坑了一下5,3,4,8,6,7在这里最大上升子序列是3 4 6 7而不是3 4 8,3 4 8称作最大连续上升子序列(一会我们也用动态规划来解决一下)2.开始算法分析 1)暴力搜索:想想都觉得很麻烦 2)动态规划算法:我们将原问题进行拆解,拆解成性质一样但是规模缩小的子问题来看,首先用dp数组来记
2016-05-13 09:14:13 320
原创 急求大神帮忙解决的问题
上一篇的动态规划入门题我引申了几个问题不会解决求大神帮忙1:如何判断对于给定的硬币的种类对某个特定的值不存在任何一个可以满足的情况2:如何将所有可能的凑出来的情况都进行保存
2016-05-12 17:06:28 543
原创 动态规划入门题
求出凑够value的1,3,5供多少枚硬币,当然是最小值思路:(动态规划) 首先:动态规划和分治法的一个区别就是,分治法把问题分成独立的子问题,子问题之间独立性很强,最后将子问题的解合并 动态规划解决最优化问题,往往将问题的规模缩小之后,会发现子问题之间的练习是非常的密切,我们这时候就要注意列表记录历史中上次的求出
2016-05-12 16:56:13 601 1
原创 快速排序以及堆排序在查找数方面的主要应用 即将引出线性查找BFPRT算法
应用解释:要求找出一组数中的第n大的数字1.快速排序改进-1(快速选择算法)快速选择算法在于排除,因为一次快排之后便可以确定要找的数在那个子区间,然后不断递归知道找到解,如果没有解最终会导致left>right,从而返回-1,代表输入的要找的数比容量要大当然为了简化的话,是一定要进行剪枝,即当输入的数比容量大的时候直接返回error#include"iostream"#include"cstdi
2016-05-10 17:18:20 971
原创 栈的回退思想实现深度优先搜索
迷宫问题求解(引用了深度优先搜索的回退的思想,只不过用循环和栈代替递归实现)因此也有深搜的一个缺点,深搜在第一次找到终点的时候会结束,但是难以求解最少步数,因此再求最小步数的时候,我们常用广度优先搜索#include"iostream"#include"cstdio"#include"cstdlib"using namespace std;struct node
2016-05-06 10:01:09 568
原创 二分搜索
二分算法注意点我们最后的精度误差是被求值之间的精度误差(是因变量的精度误差)还有要注意小心适用于单调函数以下是HDU类似的题组HDU 2199题目#include"iostream"#include"cstdio"#include"cmath"using namespace std;double y;double cal(double y){ retur
2016-05-02 17:01:25 264
从零开始学SBT
2016-08-18
关于python迭代器的问题
2017-02-10
关于python迭代器的问题
2017-02-10
关于floyed算法实现的问题
2016-11-26
关于RSA的一些问题,急求解答
2016-11-06
关于POJ 2503 ELFhash WA的问题
2016-10-30
求解5050问题的解法为什么递归返回不去了
2016-08-25
关于java swing的一点问题
2016-07-11
关于c++文件读写的一个问题
2016-06-03
C++的成员函数友元的问题
2016-05-31
链表和指针的疑惑问题
2016-05-25
TA创建的收藏夹 TA关注的收藏夹
TA关注的人