摘要: C++ STL中哈希表 hash_map介绍0 为什么需要hash_map用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改:岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典...这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的信息,最傻的方法就是取得所有的记录,然后按照名字一个一个比较。如果要速度快,就需要把这些记录按照字母顺序排列,然后按照二分法查找。但是增加记录的时候同时需要保持记录有序,因此需要插 阅读全文
posted @ 2012-06-04 11:38 waytofall 阅读(14678) 评论(1) 推荐(2)
摘要: 在做三角网格文件转换的时候需要对从文件中读取的顶点坐标进行缓存,于是索性做了一个哈希缓存以提高访问效率,同时以LRU原则在缓存满的情况下清楚缓存中的单元。在hash表中我用了最简单的取摸的方法,由于原顶点有一个索引而且这种索引连续,所以取摸的方法已经可以达到平均散列。在处理碰撞的时候我使用了链表,而所有在缓存中的单元都按放入缓存的时间串成一个链表,这样在清除单元的时候选择队尾的元素进行清除即可。/* manipulations for the vertex binary file there is a least recent used hash cache for read... 阅读全文
posted @ 2012-06-03 09:34 waytofall 阅读(2058) 评论(0) 推荐(0)
摘要: 了解Windows内存机制和监控内存使用情况的很好的文章,太大了,而且图多,就不粘贴了,链接:http://blog.csdn.net/cping1982/article/details/2812820 原文:http://www.ibm.com/developerworks/cn/java/j-memusage/#resources 阅读全文
posted @ 2012-05-29 10:55 waytofall 阅读(229) 评论(0) 推荐(0)
摘要: 原题参照TAOCP3习题Section 5, 24题题目大约是,有一个有序的单向链表,每一个元素形如<a, b>,a和b分别是一个元素(在我的解法中用字符串表示)。输入是一个文件,文件中有N-1个形如上述的元祖(N为链表中实际元素的个数),顺序随机。要求输出元祖所指示的原先的序列。比如,输入是,<k4, k5> <k1, k2><k3, k4> <k2, k3>,链表重建为<k1, k2> <k2, k3> <k3, k4> <k4, k5>,输出为k1 k2 k3 k4 k5。代码:/ 阅读全文
posted @ 2012-05-22 22:40 waytofall 阅读(571) 评论(0) 推荐(0)
摘要: 陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice原文:http://blog.csdn.net/Solstice/article/details/5166912翻转一个字符串,例如把 "12345" 变成 "54321",这是一个最简单的不过的编码任务,即便是 C 语言初学者的也能毫不费力地写出类似如下的代码:// 版本一,用中间变量交换两个数,好代码void reverse_by_swap(char* str, int n){ char* begin = str; char* end = str + n - 1 阅读全文
posted @ 2012-04-12 14:25 waytofall 阅读(452) 评论(0) 推荐(0)
摘要: 参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。即: 0^0 = 0, 1^0 = 1, 0^1 = 1, 1^1 = 0例如:10100001^00010001=10110000按位异或的3个特点:(1) 0^0=0,0^1=1 0异或任何数=任何数(2) 1^0=1,1^1=0 1异或任何数-任何数取反(3) 任何数异或自己=把自己置0 按位异或的几个常见用途:(1) 使某些特定的位翻转 例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。 10100001^00000110 = 10100111(2) 实... 阅读全文
posted @ 2012-04-12 11:55 waytofall 阅读(253) 评论(0) 推荐(0)
摘要: 重复题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。此题最初载于http://blog.csdn.net/v_JULY_v/article/details/6444021我在文章中也对其做了总结,并对线性时间的算法做了自己的证明,这里重复如下(其实后面的递归式本身就证明了算法的正确性,这里只是希望通过暴力的方法尝试对从另一个方面对它进行证明,即穷举所有可能出现情况):“关于这道题的证明,我的思路是去证明这样的扫描法包含了所有n^2种情况,即所有未显示列出的子数组都可以在本题的扫描过 阅读全文
posted @ 2012-04-10 20:15 waytofall 阅读(2276) 评论(10) 推荐(1)
摘要: 关于堆的描述可以参考:http://www.cs.auckland.ac.nz/~jmor159/PLDS210/heaps.html我的实现没有用二叉树,而是用数组。上文提到,由于堆是一种complete树(complete,和完全树略有区别),即子节点的上层是完全树,而子节点从左向右严格排列,这种数据结构可以用数组很好模拟。从第一层第一个节点为1开始,从左到右从上到下依次存储。则,对于某个索引为i的节点,其左子节点和右子节点的索引分别为:i * 2, i * 2 + 1C++代码:#include <iostream>using namespace std;template&l 阅读全文
posted @ 2012-04-10 16:02 waytofall 阅读(2580) 评论(0) 推荐(0)
摘要: 整理自 http://blog.csdn.net/v_JULY_v/article/details/6444021求子数组的最大和题目描述:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如... 阅读全文
posted @ 2012-04-10 00:08 waytofall 阅读(37817) 评论(13) 推荐(0)
摘要: 题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。C++实现:输入格式是:1 1021 代表push,后面的数字是要push的内容,2代表pop代码如下:#include <iostream>#include <fstream>#include <string>using namespace std;template <class T>class MinStackElement{public: T data; // the data stored T min; // 阅读全文
posted @ 2012-04-09 19:31 waytofall 阅读(1325) 评论(0) 推荐(0)