- 博客(14)
- 收藏
- 关注
原创 统计单词出现最多的个数
#include #include #include #define MAX 26typedef struct trie_node{ struct trie_node *branch[MAX]; int is_str ; int count;}Trie;int max = 0;void insert(Trie *,char*,char*);int
2013-08-14 12:55:46
450
转载 KMP算法详解
KMP字符串模式匹配详解来自优快云 A_B_C_ABC 网友KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。一. 简单匹配算法先来看一个简单匹配算法的函数:int Index_BF ( char S [ ], char T [ ], int po
2013-08-13 16:37:25
405
原创 排序算法
void merge_sort(int a[],int m ,int n){ if( m+1 < n) { int mid = (m+n)/2; merge_sort(a,m,mid); merge_sort(a,mid,n); merge(a,m,mid,n); }}void merge(int a
2013-08-11 21:19:30
403
原创 二维数组的传递
可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如: void Func(int array[3][10]); void Func(int array[][10]); 二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的: voi
2013-08-08 17:01:59
439
原创 bloom filter
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。本文着重于在实现Bloom Filter的时候会使用到的一些技巧。 布隆过滤器的原理不难理解。相对于一个精简的HashMap的数据结构
2013-08-03 20:13:57
603
转载 后缀数组
基本概念一、字符串的大小比较: 关于字符串的大小比较,是指通常所说的 “ 字典顺序 ” 比较, 也就是对于两个字符串 u 、v ,令 i 从 1 开始顺次比较 u[i] 和 v[i] ,如果u[i]=v[i] 则令 i 加 1 ,否则若 u[i]v[i] 则认为 u>v,比较结束。如果 i>len(u) 或者 i>len(v) 仍比较不出结果,那么若 len(u)len(v) 则 u>
2013-08-02 15:15:35
476
原创 trie 树
本文讨论一棵最简单的trie树,基于英文26个字母组成的字符串,讨论插入字符串、判断前缀是否存在、查找字符串等基本操作;至于trie树的删除单个节点实在是少见,故在此不做详解。Trie原理Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。Trie性质好多人说trie的根节点不包含任何字符信息,我所习惯的trie根节点却是包
2013-08-01 10:50:44
453
原创 败者树
外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。外部排序最常用的算法是多路归并排序,即将原文件分解成多个能够一次性装入内存的部分,分别把每一部分调入内存完成排序。然后,对已经排序的子文件进行多路归并排序。 多路归并排序算法在常见数据结构书中都有涉及。从2路到多路(k路)
2013-07-30 09:33:35
2822
原创 在一个字符串中,寻找含有目标字符的最短的字串
例如 src = "ab1dkj2ksj32g1e32ks1iji2sk1ks13ab;iksaj12s23";des = “123”,在src中找出含有“123”的最短字串。void MinSubString( char *src, char *des ){ char *q,*p,*f; p = des; f = NULL; int len = strl
2013-07-18 21:11:55
770
原创 输入一个字符串,输出该字符串中对称的子字符串的最大长度。
题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
2013-07-18 20:10:13
1120
原创 用递归的方法翻转一个栈
void reverse(Stack *st){ if(st->a.top > -1) { int temp = pop(st); reverse(st); add_bottom(st,temp); }}void add_bottom(Stack*st,int temp){ if(st->a.top ==
2013-07-18 18:55:55
462
原创 输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。 比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。因为可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,pop,po
2013-07-18 18:49:11
1211
原创 求子数组的最大和
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。此题要注意全是负数的情况!int max_sum(int a[],int
2013-07-18 18:39:46
385
原创 memcpy与memmove函数的区别
#memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中。但当源内存和目标内存存在重叠时,memcpy会出现错误,而memmove能正确地实施拷贝,但这也增加了一点点开销。memmove的处理措施:(1)当源内存的首地址等于目标内存的首地址时,不进行任何拷贝;(2)当源内存的首地址大于目标内存的首地址时,实行正向拷贝;(3)当源内存的首地
2013-07-17 23:55:28
470
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人