[笔记向] Tricks

一  压位


适用于高精度计算


将一个int数组视为一个大数

数组的第一个数视为这个大数从低到高的第一位到第八位,后面的数以此类推.

因为int最大有2x10^9,所以选择每1x10^8进一位.(然而可以1x10^9再进位,选八位只是数字好算)

例如 int a[2]={0,1}; 这个数组表示的是1x10^8

而int a[3]={0,100,1}; 表示的是1,0000,0100,0000,0000

将数的高位存在数组的最后是为了便于数位改变时的操作


贴两个代码片段

做加法:

做减法:


BitMap 位图


未排序大数据查重

思路和上面有些类似,利用unsigned int 数组存储数据的存在与否.

如果有1000万个非负整数,要求查重,可以用一个1x10^7/32=312 500大小的unsigned int数组来存储数据

将这个数组视为一段长为1000万bit的字符串

输入一个数i,若字符串上第i位为0,则把第i位置为1,否则证明这个数重复了.


按照这种思路也可以进行桶排序


C++中有一个bitset类,可以了解一下.

百度百科-BitSet


===============2015年11月15日===================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值