博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bitmap算法
阅读量:6935 次
发布时间:2019-06-27

本文共 1460 字,大约阅读时间需要 4 分钟。

hot3.png

如题:在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。

采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共需内存2^32 * 2 bit=1 GB内存,还可以接受。然后扫描这2.5亿个整数,查看Bitmap中相对应位,如果是00变01,01变10,10保持不变。所描完事后,查看bitmap,把对应位是01的整数输出即可。

下面我用golang实现bitmap(简单版本,00置01)

package mainimport (	"fmt"	"math"	"math/rand"	"unsafe")const (	size = 100)func main() {	test_sort()}func test_sort() {	arr := make([]int, size) // int占4字节,100个就占用占用400字节,3200位	for i := 0; i < len(arr); i++ {		arr[i] = rand.Intn(size)	}	print_array(arr)	newarr := bitmap_sort(arr)	print_result(newarr)}func print_array(arr []int) {	fmt.Printf("array:")	for i := 0; i < len(arr); i++ {		fmt.Printf(" %d", arr[i])	}	fmt.Printf("\n")}//内存少数据最大值小可以采用方式,位排序func bitmap_sort(arr []int) (newarr []int) {	var left uint32	size := int(unsafe.Sizeof(arr[0]) * 4)	newarr = make([]int, len(arr))	for i := 0; i < len(arr); i++ {		index := arr[i] / size		left = uint32(arr[i] % size)		leftvalue := newarr[index] & (int(math.Pow(2.0, float64(left))) - 1)		newarr[index] = (newarr[index] >> left)		if (newarr[index] & 1) == 0 {			newarr[index] += 1		}		newarr[index] = (newarr[index] << left) + leftvalue	}	return newarr}func print_result(arr []int) {	index := 0	size := int(unsafe.Sizeof(arr[0]) * 4)	fmt.Printf("new array:")	for i := 0; i < len(arr); i++ {		for j := 0; j < size; j++ {			bit := arr[i] & 1			if bit != 0 {				fmt.Printf(" %d", index)			}			arr[i] = arr[i] >> 1			index++		}	}}

转载于:https://my.oschina.net/yang1992/blog/523994

你可能感兴趣的文章
mysql常用
查看>>
Tomcat指定特定JDK版本
查看>>
前端知识 备忘录
查看>>
Python学习(13)函数
查看>>
Java伪代码
查看>>
如何进行SQL排序
查看>>
Android ViewTreeObserver简介-------------转
查看>>
avalon
查看>>
WM8962 HPOUT 信号强度 时间周期
查看>>
Linux for windows
查看>>
总结接口与类和抽象类的关系
查看>>
iOS SDWebImage清理缓存数据
查看>>
Unity 3D光源-Point Light点光源详解/灯泡、模拟灯光效果教程
查看>>
Lua基本语法-lua与C#的交互(相当简单详细的例子)
查看>>
[cocoapods]cocoapods问题解决
查看>>
数据库备份(存储过程)
查看>>
python之路--嵌套函数、匿名函数、高阶函数。函数的递归
查看>>
oracle 游标中抛出异常的处理方式
查看>>
bash的shebang行
查看>>
iOS--OCR图片识别
查看>>