[笔记向] Tricks
2015-11-15 19:05
183 查看
一 压位
适用于高精度计算
将一个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日===================
适用于高精度计算
将一个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日===================
相关文章推荐
- Educational Codeforces Round 1 C. Nearest vectors 极角排序
- Gradlle 全解析(Android官方技术文档翻译)
- 带有可变参数的方法
- fedora22下hadoop1.2.1wordcount测试
- C#总结
- Java记录 -80- 深入理解枚举(Enums)
- Linux下搜索命令
- python实现windows ie代理切换
- jquery常用操作
- 【ObjectC—浅copy和深copy】
- Java记录 -79- 枚举(Enums)
- solr 安装,配置,测试
- 数据结构学习(四)二叉树的遍历
- 设计模式 --> (12)装饰模式
- 第三年
- 网络资源
- Java 正则表达式详解
- 8.1.6 弹性盒模型(2)
- 关于eclipse导工程或移植工程常碰到的错误汇总
- 运用java求逻辑性相关的题目