摘要: 哈希,通过哈希函数将关键字与存储位置建立一个对应关系,这样在查找关键字的过程中就没比较进行一个一个比较,而直接定位关键字所在的位置,是一种以空间换取时间的方式。由于所映射的地址空间有限及哈希函数的设置,就是产生冲突,需要建立处理冲突的方法。在一般情况下,冲突只能尽可能的减少,而不能完全避免。那么什么是一个好的哈希呢?通俗点说,好的哈希也许就是能使关键字地址分布均匀,冲突少 阅读全文
posted @ 2011-11-26 11:53 东方雨中漫步者 阅读(2291) 评论(0) 推荐(1) 编辑
摘要: 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。先看一个实例:   首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块。像畅通工程这题,问还需要修几条路,实质就是求有几个连通分支。如果是1个连通分支,说明整幅图上的点都连起来了,不用再修路了;如果是2个连通分支,则只要再修1条路,从两个分支中各选一个点,把它们连起来,那么所有的点都是连起来的了;如果是3个连通分支,则只要再修两条路…… 阅读全文
posted @ 2011-11-23 20:45 东方雨中漫步者 阅读(484) 评论(0) 推荐(0) 编辑
摘要: 数据结构中为了存储和查找的方便,用各种树结构来存储文件,本章就浅谈一下各种树的表示方法、特点及各自的用途,本章设计的树结构包括:二叉查找树(二叉排序树)、平衡二叉树(AVL树)、红黑树、B-树、B+树、字典树(trie树)、后缀树、广义后缀树。 阅读全文
posted @ 2011-11-22 16:14 东方雨中漫步者 阅读(8289) 评论(1) 推荐(2) 编辑
摘要: 两个字符串,A=”abcababbca“,B=”abab“,求问字符串B是否在字符串A中。这里依旧分两种情况讨论,一是字符串B在A中的位置必须是连续的。二是字符串B在A中的位置不是连续的,只要相对位置正确就可以。 阅读全文
posted @ 2011-11-19 16:38 东方雨中漫步者 阅读(579) 评论(0) 推荐(0) 编辑
摘要: define主要是用于宏常量定义的,使程序看起来更简洁明了,方便代码维护,#define定义的实质只是一个常数的名字,没有具体数据类型的,没有分配内存空间。在编译是会被编译器替换为该常数。每次使用该宏定义,就要进行编译并分配空间,若一个程序中多次使用define定义的数据,则就会有多份拷贝。这么做是为了提高程序的可读性,但安全性相对差点。 阅读全文
posted @ 2011-11-16 17:22 东方雨中漫步者 阅读(2282) 评论(0) 推荐(0) 编辑
摘要: 关于最长公共子序列,相信大家都不是很陌生了,在这里我们分两种情况讨论,一是子序列是不连续的,二是子序列是连续的。 阅读全文
posted @ 2011-11-14 11:55 东方雨中漫步者 阅读(439) 评论(0) 推荐(0) 编辑
摘要: 1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为300M。 阅读全文
posted @ 2011-11-12 20:19 东方雨中漫步者 阅读(627) 评论(0) 推荐(0) 编辑
摘要: Trie是个简单但实用的数据结构,通常用于实现字典查询。我们做即时响应用户输入的AJAX搜索框时,就是Trie开始。本质上,Trie是一颗存储多个字符串的树。相邻节点间的边代表一个字符,这样树的每条分支代表一则子串,而树的叶节点则代表完整的字符串。和普通树不同的地方是,相同的字符串前缀共享同一条分支。还是例子最清楚。给出一组单词,inn, int, at, age, adv, ant, 我们可以得到下面的Trie: 阅读全文
posted @ 2011-11-11 08:58 东方雨中漫步者 阅读(11963) 评论(1) 推荐(1) 编辑
摘要: 对于像C++中的char这样的数据类型,它本身就是占用一个字节的大小,不会产生什么问题。但是当数制类型为int,在32bit的系统中,它需要占用4个字节(32bit),这个时候就会产生这4个字节在寄存器中的存放顺序的问题。比如int maxHeight = 0x12345678,&maxHeight = 0x0042ffc4。具体的该怎么存放呢?这个时候就需要理解计算机的大小端的原理了。 阅读全文
posted @ 2011-11-10 19:33 东方雨中漫步者 阅读(3319) 评论(0) 推荐(0) 编辑
摘要: 许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数,这就是所谓的内存对齐,而这个k则被称为该数据类型的对齐模数(alignment modulus)。当一种类型S的对齐模数与另一种类型T的对齐模数的比值是大于1的整数,我们就称类型S的对齐要求比T强(严格),而称T比S弱(宽松)。这种强制的要求一来简化了处理器与内存之间传输系统的设计,二来可以提升读取数据的速度 阅读全文
posted @ 2011-11-08 20:11 东方雨中漫步者 阅读(586) 评论(0) 推荐(0) 编辑