位图bitmap算法
来源:互联网 发布:免费tk域名注册网站 编辑:程序博客网 时间:2024/05/20 23:03
简单的说就是用数组存放若有数据就标志为1或true,若不存在标志为0或false。比如1,2,2,5,这里最大值为5,0至5中不存0,3,4,所以:
Array[0]=0,Array[1]=1,Array[2]=2,Array[3]=0,Array[4]=0,Array[5]=1
上面数中由于2有两个,所以用int存数组的值,不用boolean型,这样如果有多个同样的数字可以用值表示个数。如上面Array[2]=2,就表示2有2个。
这样排序就方便多了,比如上面开始是{2,5,2,1}这样一无序数组A。找出最大值:5.即用来作位图排序的数组B要申请的大小为5.循环这个数组,把数组A的值用作数组B的下标,如果存在就把值加1,即数组B的值为对应的个数。
for (int i : A) {
B[i]++;
}
这样B的值最后同上面的Array一样。把B值大于0的输出就是排好序的了。如上面的数组大于0依次有:1,2,2,5.
从上面可以看出位图排序至少要注意两点:
1、 最大值和最小值之间不能相差太大,否则浪费空间。
2、 如果有负数,上面要转换一下,最申请的空间大小为max-min+1,数组B的下标也要作对应的转换,输出前也要转换回去。如int[] arr = { 1, 3, -3, 0, 0};
位图排序算法如下:
/**
*使用位图法进行排序
*
*@paramarr
*/
publicstaticvoid bitmapSort(int[] arr) {
//找出数组中最值
int max = arr[0];
int min = max;
for (int i : arr) {
if (max < i) {
max = i;
}
if (min > i) {
min = i;
}
}
//得到位图数组
int[] newArr =newint[max - min + 1];
//重新调整arr中的元素
int index = 0;
for (int i = 0; i < newArr.length; i++) {
while (newArr[i] > 0) {
arr[index] = i + min;
index++;
newArr[i]--;
}
}
}
延伸:
checkbox中有多个值时,为了节约数据空间,我们可以用2^n(n>=0)的值来作为value的值。比如有4个选项A,B,C,D。value分别为1,2,4,8。假如用户选了AC,那么数据库存的就是1+4=5,这样一个5就表示了用户选中的是A,C。取出是用5 分别与上面的1,2,4,8与运算不为0即表示用户选中过。
如5(0101)
A(0001)
--------------
0001-->!=0 表示用户选中A
如5(0101)
B(0010)
--------------
0000-->==0 表示用户没用选中B
其他两项同理。
思考:题目描述:
输入:一个文件,里面大约有1千万行数据,每个数据是7位整数,同时每个数是唯一的,即不允许有2个数相同,这些整数不与其他任何数产生关联。
输出:将这个整数按升序排列,并生成到一文件中
限制:能够使用内存为1M,但是附存足够大,运行时间最多为几分钟,10s为最合适的时间。
可能的算法:
1.基于磁盘的合并排序
2 将每个号码存放到32位整数里,1M空间可以存储250000个号码,使用一个在输入文件中带有40个通道的程序。第一个通道将0-249999之间的任意整数读入内存 进行排序,依次类推 第40个通道排序9750000-9999999。快排不错。但是付出了读40次程序的代价。
3 最适合的算法,位图算法,用含有1千万个位的字符串来表示这个文件,文件中有的数据则标识为1,没有则标识为0,最后从第一位读至最后一位,即为有序的集合。这种算法充分利用了题目中给的条件,但也仅仅适合本题目,(不会有重复的数字,同时不与其余的数进行关联)
来源:http://blog.csdn.net/xgdofull/article/details/5424611
- 位图bitmap算法2
- 位图bitmap算法
- 位图bitmap算法
- bitmap 位图算法
- bitmap 位图算法
- 位图bitmap算法(java)
- 位图bitmap算法(java)
- 布隆算法Bitmap(位图算法)
- (转载)位图bitmap算法(java)
- 位图(bitmap)
- Bitmap(位图)
- 位图Bitmap
- 《位图 - Bitmap》
- 位图 bitmap
- BitMap位图
- BitMap(位图)
- BitMap--位图
- 位图Bitmap
- 算法系列-计数排序
- GNU __attribute__ 机制
- windows下的nmake以及makefile
- delphi serversocket,clientsocket
- log4net 使用注意点(WinForm)
- 位图bitmap算法
- 关于spring数据源管理几点不清楚的地方
- PHP函数set_magic_quotes_runtime()的作用
- 守护进程 demo程序
- IE无法显示PNG格式图片的解决
- 装饰器设计模式
- c++正则表达式
- mysql外部文件导入
- OpenCV2.3.1学习笔记(1):用vec类型变量构造Mat