2-bitmap
在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。
思路:
bitmap用一个bit来代表存在还是不存在,现在我们要判断重不重复,则需要三个状态:不存在,存在一个,存在多个。2bits可以表示四个状态,令00表示不存在,01表示存在1个,10表示存在多个,11无意义。
令2bits用一个序号,最后只要判断某序号的2bits是01,则该序号就是不重复的。
整数一共有2^32=4G个,一个整数对应一个序号,一个序号对应2bits,也就是需要4G * 2bits = 4G * 1/4Byte = 1G的内存。
如果机器的内存没有1G,我们也可以先将所有数据分配到更小的文件中去,比如用%10,按余数分到19个文件里去(余数可能为-9~9),那么每个文件里整数的整数最多有约4G/20 = 0.2G个,一个整数对应一个序号,一个序号对应2bits,只要约0.05G。
无论是分成小文件还是部分,都只要找出序号对应的2bits是01的序号即可。
这里我们只考虑大端机,小端类似。
char getI(int i,char *p)
{
unsigned int un= i+(unsigned int)(<<);//int可能为负数,一一对应到正数
unsigned int index = un/;
unsigned int offset = un%;
return (*(p+index)>>(-offset)) & 0x03;
} void setI(int i,char *p)
{
unsigned int un= i+(unsigned int)(<<);//int可能为负数,一一对应到正数
unsigned int index = un/;
unsigned int offset = un%;
if(getI(i,p) == 0x00) //00 -> 01
{
*(p+index) |= (0x40>>offset);
}
else if(getI(i,p) == 0x01) //00 -> 10
{
*(p+index) |= (0x80>>offset);
}
}
2-bitmap的更多相关文章
- [翻译]开发文档:android Bitmap的高效使用
内容概述 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently",包括大尺寸Bitmap的高效加载,图片的异步加载和数据缓存 ...
- 【开源毕设】一款精美的家校互动APP分享——爱吖校推 [你关注的,我们才推](持续开源更新3)附高效动态压缩Bitmap
一.写在前面 爱吖校推如同它的名字一样,是一款校园类信息推送交流平台,这么多的家校互动类软件,你选择了我,这是我的幸运.从第一次在博客园上写博客到现在,我一次一次地提高博文的质量和代码的可读性,都是为 ...
- Android Bitmap 和 ByteArray的互相转换
Android Bitmap 和 ByteArray的互相转换 移动平台图像处理,需要将图像传给native处理,如何传递?将bitmap转换成一个 byte[] 方便传递也方便cpp代码直接处理图像 ...
- Android-Drawable、Bitmap、byte[]、资源文件相互转换
我们在Android的开发中,经常可以遇到图片的处理,当中,有很多是 Bitmap.Drawable.byte[]和资源文件它们直接相互转换. 今天就此总结一下: 1.资源文件转为Drawable 2 ...
- bitmap对海量无重复的整数排序--转
原文地址:http://blog.csdn.net/u013074465/article/details/46956295 现在有n个无重复的正整数(n 小于10的7次方),如果内存限制在1.5M以内 ...
- 基于位图(Bitmap、BitmapData)的图片处理方法(C#)
目前操作位图的主流方法有三种: 1.基于Bitmap像素的处理方法,以GetPixel()和SetPixel()方法为主.方法调用简单,但是效率偏低. 2.基于内存的像素操作方法,以System.Ru ...
- android:布局、绘制、内存泄露、响应速度、listview和bitmap、线程优化以及一些优化的建议!
1.布局优化 首先删除布局中无用的控件和层级,其次有选择地使用性能较低的viewgroup,比如布局中既可以使用RelativeLayout和LinearLayout,那我们就采用LinearLayo ...
- 获取View的截图-将View转换为Bitmap对象
开发中,有时候需要获取View的截图来做动画来达到动画流程的目的 原理:将View的内容画到一个Bitmap画布上,然后取出 下面封装了一个从View生成Bitmap的工具类 /** * 将View转 ...
- bitmap解码
#include <stdio.h> #include <stdlib.h> #include <string.h> #define BYTE unsigned c ...
- Bitmap转换成BitmapImage
public BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap) { MemoryStream ms = new MemoryS ...
随机推荐
- 记录--git命令行上传项目到github仓库
由于公司一直使用的是的SVN,基本上都是内网,原来的git命令都快忘记了,当然也是自己太懒,平时都是直接拖到github上.今天打开idea后突然看到了原来自己写好的一个项目,就想将它上传到githu ...
- PHP 魔术方法浅谈
php中把以两个下划线(__)开头的方法称之为魔术方法.魔术方法包括: __construct() 类的构造方法 构建方法时被调用 __destruct() 类的析构方法 明确销毁 ...
- Django - orm外键操作
1.orm外键操作 创建外键: 备注:ForeignKey两个参数,1个为关联的表名,1个为关联的字段名: 在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避 ...
- 5.terms搜索多个值以及多值搜索结果优化
主要知识点 terms搜索多个值,并和term的比较 一.term和terms terms是在这个字段中搜索多个值,相当于sql中的in语法 (select * from tbl where ...
- Python之类方法,lambda,闭包简谈
类方法,lambda,闭包 类方法 lambda 闭包 类方法 classmethod staticmethod instancemethod 类方法 类方法,通过装饰器@classmethod来标明 ...
- AndroidTreeView:Android树形节点View
AndroidTreeView:Android树形节点View AndroidTreeView是github上的一个第三方开源项目,其在github上的项目主页是:https://github. ...
- 洛谷 P1186 玛丽卡
P1186 玛丽卡 题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道 ...
- mongodb之安装
前言 系统环境是CentOS,linux只支持64位版本 yum源安装 rpm包说明 mongodb-org-server 包含mongod进程,关联配置,初始化脚本mongodb-org-mongo ...
- Mybatis+0+null,小问题引发的血案
Mybatis在进行<if test="status != null and status != ''">判空操作时,假设status为0的时候,该推断条件的值为fal ...
- 关于PHP会话:session和cookie
会话处理解决什么问题 HTTP(超文本传输协议)定义了通过万维网(WWW)传输文本.图形.视频和全部其它的数据的规则.HTTP是一种无状态协议,每次请求的处理,都与之前和之后的请求无关. 会话处理是这 ...