11 2011 档案

摘要:哈希,通过哈希函数将关键字与存储位置建立一个对应关系,这样在查找关键字的过程中就没比较进行一个一个比较,而直接定位关键字所在的位置,是一种以空间换取时间的方式。由于所映射的地址空间有限及哈希函数的设置,就是产生冲突,需要建立处理冲突的方法。在一般情况下,冲突只能尽可能的减少,而不能完全避免。那么什么是一个好的哈希呢?通俗点说,好的哈希也许就是能使关键字地址分布均匀,冲突少 阅读全文
posted @ 2011-11-26 11:53 东方雨中漫步者 阅读(2329) 评论(0) 推荐(1)
摘要:并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。先看一个实例:   首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块。像畅通工程这题,问还需要修几条路,实质就是求有几个连通分支。如果是1个连通分支,说明整幅图上的点都连起来了,不用再修路了;如果是2个连通分支,则只要再修1条路,从两个分支中各选一个点,把它们连起来,那么所有的点都是连起来的了;如果是3个连通分支,则只要再修两条路…… 阅读全文
posted @ 2011-11-23 20:45 东方雨中漫步者 阅读(500) 评论(0) 推荐(0)
摘要:数据结构中为了存储和查找的方便,用各种树结构来存储文件,本章就浅谈一下各种树的表示方法、特点及各自的用途,本章设计的树结构包括:二叉查找树(二叉排序树)、平衡二叉树(AVL树)、红黑树、B-树、B+树、字典树(trie树)、后缀树、广义后缀树。 阅读全文
posted @ 2011-11-22 16:14 东方雨中漫步者 阅读(8367) 评论(1) 推荐(2)
摘要:两个字符串,A=”abcababbca“,B=”abab“,求问字符串B是否在字符串A中。这里依旧分两种情况讨论,一是字符串B在A中的位置必须是连续的。二是字符串B在A中的位置不是连续的,只要相对位置正确就可以。 阅读全文
posted @ 2011-11-19 16:38 东方雨中漫步者 阅读(597) 评论(0) 推荐(0)
摘要:define主要是用于宏常量定义的,使程序看起来更简洁明了,方便代码维护,#define定义的实质只是一个常数的名字,没有具体数据类型的,没有分配内存空间。在编译是会被编译器替换为该常数。每次使用该宏定义,就要进行编译并分配空间,若一个程序中多次使用define定义的数据,则就会有多份拷贝。这么做是为了提高程序的可读性,但安全性相对差点。 阅读全文
posted @ 2011-11-16 17:22 东方雨中漫步者 阅读(2306) 评论(0) 推荐(0)
摘要:关于最长公共子序列,相信大家都不是很陌生了,在这里我们分两种情况讨论,一是子序列是不连续的,二是子序列是连续的。 阅读全文
posted @ 2011-11-14 11:55 东方雨中漫步者 阅读(446) 评论(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 东方雨中漫步者 阅读(643) 评论(0) 推荐(0)
摘要:Trie是个简单但实用的数据结构,通常用于实现字典查询。我们做即时响应用户输入的AJAX搜索框时,就是Trie开始。本质上,Trie是一颗存储多个字符串的树。相邻节点间的边代表一个字符,这样树的每条分支代表一则子串,而树的叶节点则代表完整的字符串。和普通树不同的地方是,相同的字符串前缀共享同一条分支。还是例子最清楚。给出一组单词,inn, int, at, age, adv, ant, 我们可以得到下面的Trie: 阅读全文
posted @ 2011-11-11 08:58 东方雨中漫步者 阅读(12069) 评论(1) 推荐(1)
摘要:对于像C++中的char这样的数据类型,它本身就是占用一个字节的大小,不会产生什么问题。但是当数制类型为int,在32bit的系统中,它需要占用4个字节(32bit),这个时候就会产生这4个字节在寄存器中的存放顺序的问题。比如int maxHeight = 0x12345678,&maxHeight = 0x0042ffc4。具体的该怎么存放呢?这个时候就需要理解计算机的大小端的原理了。 阅读全文
posted @ 2011-11-10 19:33 东方雨中漫步者 阅读(3375) 评论(0) 推荐(0)
摘要:许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数,这就是所谓的内存对齐,而这个k则被称为该数据类型的对齐模数(alignment modulus)。当一种类型S的对齐模数与另一种类型T的对齐模数的比值是大于1的整数,我们就称类型S的对齐要求比T强(严格),而称T比S弱(宽松)。这种强制的要求一来简化了处理器与内存之间传输系统的设计,二来可以提升读取数据的速度 阅读全文
posted @ 2011-11-08 20:11 东方雨中漫步者
摘要:C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。但二者有着本质的区别: 数组:要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。 指针:可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。 阅读全文
posted @ 2011-11-07 17:21 东方雨中漫步者 阅读(1286) 评论(0) 推荐(0)
摘要:new/deletevs malloc/free malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/d. 阅读全文
posted @ 2011-11-07 16:24 东方雨中漫步者 阅读(843) 评论(0) 推荐(0)
摘要:程序变量分区中栈和堆的区别 (1)申请方式 stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间。 heap: 需要程序员自己申请,并指明大小,在C中malloc函数,C++中是new运算符。 阅读全文
posted @ 2011-11-07 16:17 东方雨中漫步者 阅读(1500) 评论(1) 推荐(0)
摘要:C++编译的程序占用的内存分类 (1)栈区(stack):程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。 (2)堆区(heap) :在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 阅读全文
posted @ 2011-11-07 15:55 东方雨中漫步者 阅读(1865) 评论(1) 推荐(1)
摘要:本章主要介绍几个概念 (1)变量和常量 变量的基本类型:bool、char、int、short、long、float、double,注意个变量的所占的字节数。 常量分类:宏常量、const常量、字符串常量,注意宏常量和cons常量之间的区别。 阅读全文
posted @ 2011-11-06 22:21 东方雨中漫步者 阅读(1372) 评论(0) 推荐(0)