位图算法。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值