http://topic.youkuaiyun.com/u/20100424/15/621f263f-2a63-4a2a-85b6-5e6c1292848d.html
本意是在论坛里开了一个讨论找出两个数组中的相同元素的帖子, 学会了这个角位图算法的算法,不知道为啥叫这个名字,好像跟位图没点关系啊.该算法的核心步骤是将整型数组转换成一个二进制序列.如有素组:{2,3,200,7000,12000},则先申请一个二进制数组,其大小为可能出现的最大的元素的值.如下图:
然后将这个数组序列保存在二进制数组当中,如下图所示,第n位如果为1,则表示n存在于这个序列中:
发现用该算法可以很好的解决数组排序问题(前提是知道数组中的元素的最大值),下面一个问题就可以很好的用这个算法来解决:
1.题目描述:
输入:一个文件,里面大约有1千万行数据,每个数据是7位整数,同时每个数是唯一的,即不允许有2个数相同,这些整数不与其他任何数产生关联。
输出:将这个整数按升序排列,并生成到一文件中
限制:能够使用内存为1M,但是附存足够大,运行时间最多为几分钟,10s为最合适的时间。
算法:用含有1千万个位的字符串来表示这个文件,文件中有的数据则标识为1,没有则标识为0,最后从第一位读至最后一位,即为有序的集合。
参考文档:http://hi.baidu.com/yeetoo/blog/item/24ce5190e5013789a977a4b2.html/
http://topic.youkuaiyun.com/u/20100424/15/621f263f-2a63-4a2a-85b6-5e6c1292848d.html