算法/数据结构
freeboy1015
这个作者很懒,什么都没留下…
展开
-
倒排索引
文件结构 设有两篇文章1和2文章1的内容为:Tom lives in Guangzhou,I live in Guangzhou too.文章2的内容为:He once lived in Shanghai. 首先我们要取得这两篇文章的关键词:a.我们现在有的是文章内容,即一个字符串,我们先要找出字符串中的所有单词,即分词。英文单词由于用转载 2012-04-08 21:11:01 · 589 阅读 · 0 评论 -
八皇后问题 回溯法
问题描述:八皇后问题是十九世纪著名数学家高斯于1850年提出的。问题是:在8*8的棋盘上摆放8个皇后,使其不能互相攻击,即任意的两个皇后不能处在同意行,同一列,或同意斜线上。可以把八皇后问题拓展为n皇后问题,即在n*n的棋盘上摆放n个皇后,使其任意两个皇后都不能处于同一行、同一列或同一斜线上。问题分析 : 显然,每一行可以而且必须放一个皇后,所以n皇后问题的解可以用一个转载 2012-09-25 20:18:11 · 1120 阅读 · 0 评论 -
KMP算法详解
如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'm matrix67",字符串B="matrix",我们就说B是A的子串。你可以委婉地问你的MM:“转载 2012-11-09 10:32:45 · 597 阅读 · 0 评论 -
中国剩余定理(同余方程组)小结
问题简单来说就是 a = ai (mod ni) 求未知数a, 以下小结略去证明, 只是对定理作了必要的解释, 要了解相关定理,可查阅数论资料.中国余数定理: 设 n=n1*n2...nk, 其中因子两两互质.有: a-----(a1,a2,...,ak), 其中ai = a mod ni, 则 a和(a1,a2,...,ak)关系是一一对应的.就是说可以由 a求出转载 2013-02-21 15:59:24 · 940 阅读 · 0 评论 -
m图着色问题
四色问题:四色问题是m图着色问题的一个特列,根据四色原理,证明平面或球面上的任何地图的所有区域都至多可用四种、颜色来着色,并使任何两个有一段公共边界的相邻区域没有相同的颜色。这个问题可转换成对一平面图的4-着色判定问题(平面图是一个能画于平面上而边无任何交叉的图)。将地图的每个区域变成一个结点,若两个区域相邻,则相应的结点用一条边连接起来。多年来,虽然已证明用5种颜色足以对任一幅地图着色,原创 2013-03-29 14:28:47 · 1068 阅读 · 0 评论 -
B树、B-树、B+树、B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,转载 2013-04-10 21:06:49 · 603 阅读 · 0 评论 -
红黑树实现源码
我曾经写过红黑树的实现, 在:https://github.com/freeboy1015/RBTreeRB-Tree的插入和删除操作的实现算法 参考资料: 1) > 2) http://lxr.linux.no/linux/lib/rbtree.c 红黑树的几个性质: 1) 每个结点只有红和黑两种颜色 2) 根结原创 2013-04-10 21:27:43 · 722 阅读 · 0 评论 -
八数码的八境界
原文地址:点击打开链接转载 2013-04-26 16:38:36 · 735 阅读 · 0 评论 -
KMP算法和BM算法
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%9B%E4%BA%8B%EF%BC%88%E4%B8%80%EF%BC%89.html转载 2013-04-26 15:47:54 · 1008 阅读 · 0 评论 -
理解A*寻路算法具体过程
原文地址:http://www.cnblogs.com/technology/archive/2011/05/26/2058842.html这两天研究了下 A* 寻路算法, 主要学习了这篇文章, 但这篇翻译得不是很好, 我花了很久才看明白文章中的各种指代. 特写此篇博客用来总结, 并写了寻路算法的代码, 觉得有用的同学可以看看. 另外因为图片制作起来比较麻烦, 所以我用的是原文里的转载 2013-04-26 16:24:36 · 661 阅读 · 0 评论 -
字符串匹配的KMP算法
字符串匹配是计算机的基本任务之一。举例来说,有一个字符串”BBC ABCDAB ABCDABCDABDE”,我想知道,里面是否包含另一个字符串”ABCDABD”?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理转载 2013-05-03 08:50:23 · 541 阅读 · 0 评论 -
12个球一个天平 现知道只有一个和其它的重量不同 问怎样称才能用三次就找到那个球。13个呢
方法一:12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。1,天平一边放四个,平则坏球在余下的四个里,好办(同方法二中的相等处理)。 不平,先将偏重的四个编号为:1、2、3、4。偏轻的编为A、B、C、D(因为不知道轻重)。2。天平一边放三个,比如:左边放1、2、A。右边放3、4、B。 平则坏球是C、D 里偏轻的,不平则根据轻重淘汰1、2、B或 3、4原创 2013-05-06 10:29:13 · 1292 阅读 · 0 评论 -
Boyer-Moore算法学习
http://blog.csdn.net/sealyao/article/details/4568167点击打开链接转载 2013-05-07 10:15:48 · 583 阅读 · 0 评论 -
快速排序
//快速排序void quick_sort(int s[], int l, int r){ if (l < r) { //Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1 int i = l, j = r; int x = s[l]; while (i < j)原创 2013-09-17 16:08:53 · 753 阅读 · 0 评论 -
KMP算法代码
#include "StdAfx.h" #include #include using namespace std; //代码4-1 //修正后的求next数组各值的函数代码 void get_nextval(char const* ptrn, int plen, int* nextval) { int i = 0; //注,此处原创 2013-09-17 16:26:17 · 807 阅读 · 0 评论 -
二叉树的非递归后序遍历算法
前序、中序、后序的非递归遍历中,要数后序最为麻烦,如果只在栈中保留指向结点的指针,那是不够的,必须有一些额外的信息存放在栈中。方法有很多,这里只举一种,先定义栈结点的数据结构typedef struct{ Node * p; int rvisited;}SNode //Node 是二叉树的结点结构,rvisited==1代表p所指向的结点的右结点已被访问过。LastOrd原创 2013-10-08 20:32:53 · 960 阅读 · 0 评论 -
k-d tree算法
k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。应用背景 SIFT算法中做特征点匹配的时候就会利用到k-d树。而特征点匹配实际上就是一个通过距离函数在高维矢量之间进行相似性检索的问题。针对如何快速而准确地找到查询点的近邻,现在提出了很多高维空间索引结构和近似查询的算法,k-d树就是其中转载 2013-10-09 22:00:49 · 1088 阅读 · 0 评论 -
车牌识别及验证码识别的一般思路
全文分两部分,第一部分讲车牌识别及普通验证码这一类识别的普通方法,第二部分讲对类似QQ验证码,Gmail验证码这一类变态验证码的识别方法和思路。算法概述如下: 一、车牌/验证码识别的普通方法 车牌、验证码识别的普通方法为:(1) 将图片灰度化与二值化(2) 去噪,然后切割成一个一个的字符(3) 提取每一个字符的特征,生成特转载 2012-09-20 15:58:29 · 1487 阅读 · 0 评论 -
0/1背包问题算法思路精讲
0/1背包问题 1. 问题描述 给定一个载重量为m,n个物品,其重量为wi,价值为vi,1原创 2012-09-19 16:34:48 · 1425 阅读 · 0 评论 -
俄罗斯方块游戏算法分析
该游戏算法比较简单,主要功夫都在界面体验上了,比如方块图形、用户控制、消去与累计等。图形我们采用GDI+画图方式显示,共8种图形,当然可以根据自己的喜好随意定制。如何表示图形?我们可以借鉴马赛克效果。把所有图形都用3*3矩阵表示,0表示背景色显示,1表示着色显示。比如 {0,0,0}, {0,1,0}, 表示 T型,看出来了吗?每个数字位置其实就是一个正方形转载 2012-04-08 20:11:10 · 17857 阅读 · 0 评论 -
堆的操作和实现
数据结构——堆的操作和实现当应用优先级队列或者进行堆排序时,一般利用堆来实现。堆是一个完全(除最底层外都是满的)二叉树,并满足如下条件:1、根结点若有子树,则子树一定也是堆。2、根结点一定大于(或小于)子结点。因为要求堆必须是完全二叉树,所以可以用线性的数据结构,比如数组,来实现堆。利用数组实现,则对于长为N的堆中的元素从0到N-1排列,原创 2012-04-08 20:51:55 · 902 阅读 · 0 评论 -
外部排序简介
我们一般提到排序都是指内排序,比如快速排序,堆排序,归并排序等,所谓内排序就是可以在内存中完成的排序。RAM的访问速度大约是磁盘的25万倍,我们当然希望如果可以的话都是内排来完成。但对于大数据集来说,内存是远远不够的,这时候就涉及到外排序的知识了。 外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以原创 2012-04-08 21:21:18 · 503 阅读 · 0 评论 -
倒排索引求子串
有对搜索引擎有点了解的,就应该知道倒排索引吧。不知道也不要紧,看看就行了,这种数据结构比较简单,但很实用, 这里举个例子来说明,有时候在非搜索引擎的运用中,倒排索引也能显著提高算法效率。 例. 在一串由0,1,2,3,4,5,6,7,8,9这十个字符组成的长度为n的序列中,找出各字符至少出现一次且长度最小的子串长度。算法一:暴力 枚举一个起点一个终点,检查区原创 2012-04-08 21:03:39 · 920 阅读 · 2 评论 -
BloomFilter——大规模数据处理利器
BloomFilter——大规模数据处理利器 Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。 一. 实例 为了说明Bloom Filter存在的重要意义,举一个实例: 假设要你写一个网络蜘蛛(web crawle原创 2012-03-23 10:53:21 · 488 阅读 · 0 评论 -
Bit-map(位图)
什么是Bit-map 所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。 如果说了这么多还没明白什么是Bit-map,那么我们来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。那么我们就可以采用Bit-ma原创 2012-03-23 11:12:17 · 627 阅读 · 0 评论 -
哈希(Hash)表
哈希(Hash)表 一般的查找方法是基于比较的方法,查找效率依赖比较次数,其实理想的查找是希望不经比较,一次存取便能得到所查记录。这样就必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,查找k时,只要根据这个对应关系f找到给定值k的像f(k)。这种对应关系f叫哈希(hash)函数。按这种思想建立的表叫哈希表(也叫散列表)。 哈希表存取方便原创 2012-03-23 11:00:29 · 592 阅读 · 0 评论 -
连连看算法及源代码
闲着无聊,编个连连看玩玩,用了魔兽里面的头像来做图片。下面记录如下: 程序的关键在于判断用户连续点击的两个图案能否消除。两个图片可以消除的条件有两个:图片相同图片间连线的转角数不得超过2 。 而判断能否通过小于两个转角的路径连通的算法有两种:分类判断法以转角数为标准的广度优先搜索 下面对两种算法分别转载 2012-03-23 11:28:38 · 1002 阅读 · 0 评论 -
《编程之美》2.20 程序理解和时间分析(读别人的程序)
题目: 给出一段C#代码,要求不用电脑,理解程序并回答问题。 解答:下面是从C#代码中改写成的C++代码:#include "stdafx.h"#include#include#include#include#include#include#include#includeusing namespace std;int _tm转载 2012-04-26 09:26:18 · 587 阅读 · 0 评论 -
常用正则表达式
常用正则表达式版本:v0.01 (2011-6-7) 整理:deerchao 转载请注明来源说明:正则表达式通常用于两种任务:1.验证,2.搜索/替换。用于验证时,通常需要在前后分别加上^和$,以匹配整个待验证字符串;搜索/替换时是否加上此限定则根据搜索的要求而定,此外,也有可能要在前后加上\b而不是^和$。此表所列的常用正则表达式,除个别外均未在前后加上任何限定,请根据需要,自行转载 2012-04-18 09:46:44 · 477 阅读 · 0 评论 -
《精通正则表达式》书评
《精通正则表达式》书评 作者:孟岩(原文) IT产业新技术日新月异,令人目不暇接,然而在这其中,真正称得上伟大东西的却寥寥无几。1998年,被誉为“软件世界的爱迪生”,发明了 BSD、 TCP/IP、csh、vi 和 NFS 的 SUN 首席科学转载 2012-04-18 10:40:43 · 608 阅读 · 0 评论 -
正则表达式30分钟入门教程
正则表达式30分钟入门教程版本:v2.32 (2011-8-17) 作者:deerchao 转载请注明来源目录跳过目录本文目标如何使用本教程正则表达式到底是什么东西?入门测试正则表达式元字符字符转义重复字符类分枝条件反义分组后向引用零宽断言负向零宽断言注释贪婪与懒惰处理选项平衡组/递归匹配还有些什么东西没提到联系作者网上的资源及本文参考文献更新纪录本文目标转载 2012-04-18 09:45:34 · 507 阅读 · 0 评论 -
挖雷游戏的概率
编程之美最后一题“挖雷游戏的概率”没附答案, 有一则脚注云“此题适合MATLAB用户解答”, 颇感有趣. 题目说, 一局16×16的扫雷游戏刚开始, 只翻开了两格, 分别显示数字1和2, 如下图所示(只画出了3×5的局部示意图). 设地雷总数从10逐渐增加到240, 请分别作出图中A, B, C三处为地雷的概率曲线.此题适合用MATLAB解答是因为要求作出概率曲线. 如果地雷总原创 2012-05-08 09:18:39 · 2690 阅读 · 0 评论 -
如何证明一个数能否被7整除的判定方法
如题,一个数能否被7整除的判定方法是如下的:例如,求344617能否被7整除把617-344=273,273能被7整除,所以344617能被7整除又如,求4241468能否被7整除把468-241+4=231能被7整除,所以4241468能被7整除怎样证明此方法呢?最好用中文回答。用比较简单易明的方法。技巧很简单,只用 1001 = 7*11*13 即可,请看看下面。比个中文版原创 2012-05-08 09:19:44 · 12132 阅读 · 0 评论 -
一些C/C++开源项目网址
http://code.ijinshan.com/ http://search.csdn.net/CSDN搜索,CSDN还是有非常多的编程资源的,用它的搜索能搜出不少东西。代码类别也比较全面。http://snippets.org/简单实用的代码收集网站,强力推荐。比如你要找个DES加密,要找个数据压缩,找个INI文件操作的C代码等,均能手到擒来。http://www.转载 2012-09-10 11:29:12 · 7265 阅读 · 0 评论 -
用STL的next_permutation算法实现全排列
1、next_permutation实现原理在《STL源码解析》中找到了这个函数,在此也简单叙述一下原理: 在STL中,除了next_permutation外,还有一个函数prev_permutation,两者都是用来计算排列组合的函数。前者是求出下一个排列组合,而后者是求出上一个排列组合。所谓“下一个”和“上一个”,书中举了一个简单的例子:对序列 {a, b, c},每一原创 2012-09-29 11:19:54 · 1486 阅读 · 0 评论 -
三十分钟掌握STL
三十分钟掌握STL这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟内觉得有所收获,那么赶紧扔了它。文中我省略了很多东西。心疼那,浪费我两个晚上。译者:karycontact:karymay@163.netSTL概述STL的一个重要特点是数据结构和算法的分离。尽转载 2012-04-18 09:47:44 · 546 阅读 · 0 评论 -
R树:处理空间存储问题
R树:处理空间存储问题相信经过上面第一节的介绍,你已经对B树或者B+树有所了解。这种树可以非常好的处理一维空间存储的问题。B树是一棵平衡树,它是把一维直线分为若干段线段,当我们查找满足某个要求的点的时候,只要去查找它所属的线段即可。依我看来,这种思想其实就是先找一个大的空间,再逐步缩小所要查找的空间,最终在一个自己设定的最小不可分空间内找出满足要求的解。一个典型的B树查找如下: 要查找转载 2013-10-09 22:18:10 · 1526 阅读 · 0 评论