数据结构(五)位图算法
位图算法实现思想:
将需要排序的数字转换为数组的下标,通过数组的下标完成对数据的排序,优点效率高,缺点浪费存储空间。
1 | public class BitMapTest { |
2 | /** |
3 | * 参数说明: |
4 | * @param buf 新定义的bit数组(int类型) |
5 | * @param value 需排序的传入数值 |
6 | * @return |
7 | * |
8 | * 功能说明: |
9 | * 将value值转换为数组的下标,将数组buf的第value位置为1 |
10 | * buf[value >> 5]表示value属于int数组的第几个成员 |
11 | * value & 0x1F 表示在对应int数组项中具体的第几个bit位 |
12 | * buf[value >> 5] |= (1 << (value & 0x1F))表示将对应数组项目中的bit位置为1 |
13 | */ |
14 | public static void encode(int []buf,int value){ |
15 | buf[value >> 5] |= (1 << (value & 0x1F)); |
16 | } |
17 | |
18 | /** |
19 | * 参数说明 |
20 | * @param buf 编码后的bit数组 |
21 | * @param value 传入的bit数组下标 |
22 | * @return |
23 | * |
24 | * 功能 |
25 | * 判读buf数组中相应的数据项中对用的bit位是否为 1 |
26 | */ |
27 | public static int decode(int [] buf,int value){ |
28 | return buf[value >> 5] & (1 << (value & 0x1F)); |
29 | } |
30 | |
31 | public static void main(String[] args) { |
32 | int a[] = {3,98,15,12,7,9,8,17,6,11}; |
33 | long start = System.currentTimeMillis(); |
34 | int LENGTH = a.length; |
35 | int max = 0,i=0; |
36 | |
37 | for (i=0;i<LENGTH;i++){ |
38 | if (a[i] > max){ |
39 | max = a[i]; |
40 | } |
41 | System.out.print(a[i]+", "); |
42 | } |
43 | System.out.println(); |
44 | |
45 | // 获取int数组的长度,取排序数子中的最大值与数组长度中的二者的最大值 |
46 | max = max>LENGTH?max:LENGTH; |
47 | int size = max/32+1;//98/32+1=4 |
48 | |
49 | int []r = new int[size]; |
50 | for (i=0;i<LENGTH;i++){ |
51 | encode(r,a[i]); |
52 | } |
53 | |
54 | // 遍历的长度大于max即可 |
55 | for (i=0;i<max+1;i++){ |
56 | if (decode(r,i) > 0){ |
57 | System.out.print(i + ","); |
58 | } |
59 | } |
60 | System.out.println(); |
61 | |
62 | System.out.println("time:"+(System.currentTimeMillis()-start)); |
63 | } |
64 | } |
转载于:https://www.cnblogs.com/jianyuan/p/5410974.html
数据结构(五)位图算法相关推荐
- 浅谈算法和数据结构: 五 优先级队列与堆排序
原文:浅谈算法和数据结构: 五 优先级队列与堆排序 在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象.最简单的一个例子就是,在手机上玩游戏 ...
- python数据结构推荐书-「算法与数据结构」从入门到进阶吐血整理推荐书单
推荐一下「算法与数据结构」从入门到进阶的书单. 一.入门系列 这些书籍通过图片.打比方等通俗易懂的方法来讲述,让你能达到懂一些基础算法,线性表,堆栈,队列,树,图,DP算法,背包问题等,不要求会实现, ...
- 三维点云学习(2)五种算法比较
三维点云学习(2)五种算法比较 代码参考来自 黎老师github 本次测试包含五种算法比较: octree print("octree --------------")#时间统计c ...
- 高级数据结构——海量数据(位图,布隆过滤器)
目录 位图 位图介绍 位图代码实现 布隆过滤器 布隆过滤器介绍 布隆过滤器代码实现 布隆过滤器的优缺点 海量数据相关题目 位图 位图介绍 位图(bitmap),适用于存储海量,非负整数,不重复的数据. ...
- C1认证学习十四、十五(算法常识、HTML Head 头)
C1认证学习十四.十五(算法常识.HTML Head 头) 文章目录 C1认证学习十四.十五(算法常识.HTML Head 头) 十四(算法常识) 任务背景 任务目标 查找算法 1.顺序查找 2.二分 ...
- 排序算法(五)——堆排序算法详解及Python实现
本文目录 一.简介 二.算法介绍 三.代码实现 排序算法系列--相关文章 一.简介 堆排序(Heap Sort)算法,属于选择排序类,不稳定排序,时间复杂度O(nlogn). 堆排序由Floyd和Wi ...
- 计算机导论算法设计,计算机导论精品PPT-第五章 算法与程序设计.ppt
<计算机导论精品PPT-第五章 算法与程序设计.ppt>由会员分享,可在线阅读,更多相关<计算机导论精品PPT-第五章 算法与程序设计.ppt(52页珍藏版)>请在人人文库网上 ...
- 【从蛋壳到满天飞】JS 数据结构解析和算法实现-AVL树(一)
前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...
- 【从蛋壳到满天飞】JS 数据结构解析和算法实现-哈希表
前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...
最新文章
- 自动化测试的优势和局限性有哪些
- [LeetCode] Binary Tree Postorder Traversal 二叉树的后序遍历
- APM - Prometheus监控系统初探
- 基础加强:反射和注解
- jquey(判断文本框输入的网址链接是否符合规则)
- linux安装mysql5.6.14_(四)Zabbix_linux安装mysql5.6
- pycharm创建python虚拟环境好处_PyCharm虚拟环境创建Django2项目一些问题的解决方案...
- Python——(Anaconda+PyCharm)Youki的Python环境配置笔记(Ubuntu+Windows)~
- AIR 文件系统概要
- Java项目:SSM网上超市购物商城管理系统
- ubuntu 14.04 安装 minidwep-gtk, aircrack-ng, reaver 搭建抓包环境
- 双系统下Ubuntu完整卸载
- python csv写文件,用Excel打开中文乱码解决
- nginx的配置优化
- 解决warning: #1296-D: extended constant initialiser used告警
- Java final String类的详细用法还有特性说明,自己也在学习.
- [转帖]三星F488E的JAVA安装方法
- 计算机二级抽题规律,计算机二级考试抽题规律计算机二级考试题及答案.doc
- Real-Time Rendering——Chapter 7 Advanced Shading
- 图片版权保护 用这个盲水印API就够了
热门文章
- MATLAB2014b下运行cuda6.5安装方法及例程
- java+pom.xml+是什么_java – 父pom.xml的包装无效,必须是“pom”,而是“ear”
- pyqt5项目(计算器)
- 【大脑】改善记忆力的食物有哪些
- ACM_变形课(并查集)
- Django之路——6 Django的模型层(二)
- shell基础:多命令顺序执行与管道符
- Java基本语法——(用于日后复习)
- 8.依赖的传递、排除、冲突
- [原创] SQLite数据库使用清单(上)