摘要: 问题描述:先有一文本串T,一模式串P,找出P在T中首次出现的位置,若不存在返回-1。算法思想:若能在T中找到P那么则意味着 T[[i + j] = P[j],其中i代表T与P匹配时候的首字母下标,0<=j<length(P)。当T与P匹配失败的时候,将P向右滑动,依次将P与T所对应的字符进行匹配。大致过程如图所示:其中红色字符代表匹配成功,灰色代表匹配失败。核心代码: 1 int NaiveStringMatch(char* T,char* P) 2 { 3 //T为文本串,P为模式串 4 int tLen,pLen; 5 int i,j; 6 tLen = s... 阅读全文
posted @ 2013-09-20 09:35 Howey 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 概念 优先级队列是一种用来维护一组元素集合的数据结构,这一组元素都具有关键字key,对于此队列,优先级高的先出队列,优先级低的后出队列。有两种优先级队列:1.最大优先级队列:关键字越大,优先级越高,其本身建立在大根堆之上。2.最小优先级队列:关键字越小,优先级越小,其本身建立在小根堆之上。最小优先级队列 由于两种队列在实现的时候相类似,因此在此只介绍最小优先级队列。如果对对堆这个概念不是很清楚,可以参考下Howey写的堆排序。网址为:http://www.cnblogs.com/heweiyou1993/p/3330195.html在此先给出小根堆核心代码: 1 int left(int .. 阅读全文
posted @ 2013-09-20 09:30 Howey 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 堆 (二叉)堆数据结构是一种数组对象,可以看做成一个完全二叉树,除最后一层外树的每一次都必须填满。下面给出数组与树之间的关系图: 为了满足堆的有关性质,数组下标应从1开始记起。可以看出在这个所谓堆的二叉树中其子节点与父节点满足的关系为 parent(i) = i/2,即下标为 i 的节点的父节点为下标为 i/2 的节点;left(i) = i*2,即下标为 i 的节点的左子节点为下标为 i*2 的节点; right(i) = i*2+1,即下标为i的节点的右子节点为下标为 i*2+1 的节点。大根堆 所谓的大根堆即父节点的值总是比子节点的值大,即可以推出 A[i] >= A[i*2] , 阅读全文
posted @ 2013-09-20 09:22 Howey 阅读(205) 评论(0) 推荐(0) 编辑