由“中位数”想起的—-分治 or 计数排序?

2010年8月28日 小卢 4 条评论

 
前天在网上看到一个题目,说的是求中位数,但是这个中位数,不是我们所讨论的那样简单。看题目如下:
在32位机器中,int占4字节,存在文件中的4T个数中找出第2T大的数,内存只有2G。请列出解法。
这个题目,其中有个问题有些复杂,不过肯定是有解法的。其中,4T个数,每个数占用4个字节,那么就应该是16TB的内存才能存的下,这样算来,是不能在内存里面处理全部数据了,其实如果真的想不到好的办法,可以用最朴素(也可以说是最笨)的方法,对文件进行外排(归并),就可以求出来了。
看到这个问题,我首先想的到的是用分治法。分治是肯定可以解决这个问题的。
解法1 分治法
依次读取数据,按每一个数据的最高位分[......]

继续阅读

分类: 算法讨论, 编程 标签:

rabin-karp算法以及POJ-1200-Crazy Search

2010年8月13日 小卢 2 条评论

今天抽时间看了下字符串的模式匹配,觉得算法导论上讲的还是蛮好的,rabin-karp算法,有限状态机算法,以及KMP算法,呵呵。想深入研究下rabin-karp算法,算法导论上面用了那么多的公式说明这个问题,其实这个算法就是有点使用hash的思想了。把模式字符串进行一个预处理,并mod,主字符串进行逐个进行简单的hash映射,然后mod比较…虽然最差是O(m(n-m+1)),一般情况下是O(m)次。
比如:子串“421″和源串”4234212456″
首先把423对某个质数取模,比如7,把模值和421对7取模的值进行对比。如果相同,则再用朴素算法[......]

继续阅读

分类: 算法讨论, 编程 标签:

【转载】不随便牵手,更不随便放手

2010年8月12日 小卢 1 条评论

不随便牵手,更不随便放手
你发觉了吗?爱的感觉,总是在一开始的时候甜蜜,总觉得多了一个人陪。多了一个人帮你分担,你终于不在孤寂单了,因为至少有一个人想着你、恋着你,不论做什么事情,只要能在一起,就是好的。
但是慢慢的,随着认识的加深,你开始发现了对方的缺点,于是问题一个接一个出现,你开始烦、累、甚至想要逃避,有人说爱情就像捡石头,总想捡到一个适合自己的,但是你又如何知道什么时候能捡到呢?她适合你,那你又适合他吗?
其实,爱情应该像磨石子儿,或许刚捡到的时候,你不是那么满意,但是请记住,人是有弹性的,很多事情是可以改变的,只要你有心,有勇气,与其到处去捡未知的石头,还不如将自己已经拥有的石头磨亮[......]

继续阅读

分类: 生活 标签:

poj2503 Babelfish–hash解决实现快速匹配

2010年8月8日 小卢 没有评论

http://acm.pku.edu.cn/JudgeOnline/problem?id=2503
其实这个题目,使用qsort+二分查找应该是比较简单可以实现的,使用trie应该也可以,但是不晓得速度怎么样,另外不晓得有没有人直接用STL中的map做了没有,呵呵,那个一定很水。
我使用hash来做的目的是想熟悉一下指针以及hash的操作。这个题目我想到了使用ELFHash,并且使用拉链法处理冲突问题。
但是在POJ上运行的时间并不是很理想,后来我查看了一下,才晓得。为了节省空间,每个单词,每次去malloc空间,其实这样不太好,每次都去浪费时间去malloc,既然题目中明显说出仅有10000[......]

继续阅读

分类: 算法讨论, 编程 标签:

由腾讯笔试题想到的–ELFHash分析

2010年8月3日 小卢 没有评论

在一个cache系统中,需要实现一个域名白名单,域名为下列数据:
www.qq.com、www.baidu.com、sohu.com 等
该白名单需要在程序启动时加载一次,主要执行查询操作。请设计一个数据结构和相应的初始化查询函数,使得检索尽可能的快。(不能使用stl::map,等等key-value刑类库)。

我们可以看到,该题目提出了字符串的快速查找,并且只加载一次。使用Hash比较好。
我们可能首先就是想到使用 C++ 中的 MAP ,题目中给出了不允许使用MAP,那么肯定第二选择就是使用Berkeley DB (DB)这种的文件数据库了,但是题目中明显提出不允许使用key-value[......]

继续阅读

分类: Linux专区, 算法讨论 标签:

有关“数独”游戏…

2010年7月13日 小卢 3 条评论

很有幸,通过了华为编程大赛的初赛,进入决赛。
决赛时间是7.9号 8:00–15:00,在重庆大学。这次大赛的题目,是关于sudoku的,关于判局、求解、生成游戏。
本次比赛的题目是数独游戏相关的,我就不说了吧,百度一下,网上一大把!
在整整一天的比赛时间里,我花了一个上午的时间写一个MFC的界面,好痛苦。比赛环境,连个MSDN都没得,而且,最近这一年都一直在linux下做,很久没有MFC了。不过还好的是,把界面给做出来了。
中午和下午想了两个算法。
1)判局,也就是要判断用户,填入的数据是不是合法的,首先要判断每一行、每一列、每个九宫格,是不是仅有1-9的全部数字组成。判断这个我[......]

继续阅读

分类: 算法讨论, 编程 标签:

固态硬盘与普通硬盘比较,有哪些优缺点

2010年6月27日 小卢 1 条评论

非常之郁闷,今天去教室看书,结果,本科生考试。杯具了。转了一圈没找到一个教室看书!愤然回来了。
翻了翻网易的笔试题。看到有谈到固态硬盘和传统硬盘。以前只有简单了解,没有仔细分析。于是…百度、谷歌…
优点:

1. 启动快,没有电机加速旋转的过程。
2. 不用磁头,快速随机读取,读延迟极小。根据相关测试:两台电脑在同样配置的电脑下,搭载固态硬盘的笔记本从开机到出现桌面一共只用了18秒,而搭载传统硬盘的笔记本总共用了31秒,两者几乎有将近一半的差距。
3. 相对固定的读取时间。由于寻址时间与数据存储位置无关,因此磁盘碎片不会影响读取时间。
4. 基于DRAM的固态硬盘写入速[......]

继续阅读

分类: 电子知识 标签:

说一下网络字节序

2010年6月24日 小卢 2 条评论

统计每个网段的IP个数到ipmap的映射表中,协议栈中的IP是网络字节序的,有的转过了,但部分还没有转换。找来找去,找迷糊了都…
说到网络字节序,可能不免要说道:主机字节序
不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序。
有两种字节序 :1. Little endian:将低序字节存储在起始地址 2. Big endian:将高序字节存储在起始地址
LE little-endian
比较人的思维的字节序,地址低位存储值的低位 ,地址高位存储值的高位
BE big-endian
最直观的字节序,地址低位存储值的高位,地址高位存储值的低位
为什么[......]

继续阅读

分类: 编程 标签:

[收藏]简单的了解一堂 应该听的课。(曾被疯狂转载)

2010年6月18日 小卢 没有评论

下面的内容转自:
海bar的博客
一个字一个字的敲上、一个字一个字的品读。
1、什么是孤独?孤独是从人群中偷来的享受,她高傲、优美,完全是精神的自由。孤独,是需要我们有独处的时间,做到“如我所是”,完全不需要装扮、做作,不需要戴着帽子抽根烟来装深沉。
2、什么是寂寞?寂寞是一种病,是一种精神的饥饿。既然是病,就需要治疗。寂寞的人如何找到治疗的方法?方法就是人群,寂寞的人总是需要他人的陪伴。
3、人群的治疗分为两种。一种是利益需要建造人脉,这仅仅是互为功利(确实有用,不过不会有真正的朋友);还有一种是寂寞者的相互取暖,这是廉价的交往。
4、狂欢是一群人的寂寞,孤独是一个人的狂欢。
5、孤独不求外[......]

继续阅读

分类: 生活 标签:

10的反,是多少?int型内存存放方式的一个小总结

2010年6月17日 小卢 1 条评论

昨天自习室,献哥读这本《c缺陷与陷阱》,看到激情之处,和我讨论 ~10 为多少?
想了一下,32位系统下是…结果算了半天没有一个确切的结果,我才晓得是这一块本科2年纪学的东西,都忘记差不多了。
回来翻翻书,百度、google一把,终于整明白了。
做个记录:
在计算机中,int数据是用补码形式保存的,用补码表示有两个好处:

(1)使符号位能与有效值部分一起参加运算,从而简化运算规则.
(2)使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计 所有这些转换都是在计算机的最底层进行的。

关于补码的详细介绍,我们可以看百科把(点我学习补码)
因此,我们可以计算出~10的过程:[......]

继续阅读

分类: 编程 标签: