数据结构(五)位图算法

位图算法实现思想:

将需要排序的数字转换为数组的下标,通过数组的下标完成对数据的排序,优点效率高,缺点浪费存储空间。

public class BitMapTest {
    /**
     * 参数说明:
     * @param buf 新定义的bit数组(int类型)
     * @param value 需排序的传入数值
     * @return
     * 
     * 功能说明:
     *     将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  }
时间: 2024-08-04 03:00:39

数据结构(五)位图算法的相关文章

浅谈算法和数据结构: 五 优先级队列与堆排序

转载自:http://www.cnblogs.com/yangecnu/p/Introduce-Priority-Queue-And-Heap-Sort.html 浅谈算法和数据结构: 五 优先级队列与堆排序 在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象.最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话. 在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是

数据结构-各类排序算法总结[结局]

各类排序算法总结 五.分配类排序->基数排序: 基数排序是一种借助于多关键码排序的思想,是将单关键码按基数分成"多关键码"进行排序的方法.基数排序属于"低位优先"排序法,通过反复进行分配与收集操作完成排序. 对于数字型或字符型的单关键字,可以看成是由多个数位或多个字符构成的多关键字, 此时可以采用这种"分配-收集"的办法进行排序,称作基数排序法.其好处是不需要进行关键字间的比较. 例如:对下列这组关键字{278, 109, 063, 930

LeetCode-Repeated DNA Sequences (位图算法减少内存)

Repeated DNA Sequences All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACGAATTCCG". When studying DNA, it is sometimes useful to identify repeated sequences within the DNA. Write a function to find all

数据结构-各类排序算法总结[续]

各类排序算法总结 三.交换类排序[接上] 2.快速排序 快速排序是通过比较关键码.交换记录,以某个记录为界(该记录称为支点),将待排序列分成两部分.其中,一部分所有记录的关键码大于等于支点记录的关键码,另一部分所有记录的关键码小于支点记录的关键码.我们将待排序列按关键码以支点记录分成两部分的过程,称为一次划分.对各部分不断划分,直到整个序列按关键码有序. 如果每次划分对一个元素定位后,该元素的左侧子序列与右侧子序列的长度相同,则下一步将是对两个长度减半的子序列进行排序,这是最理想的情况! [算法

位图算法在用户验证上的应用

前几天在博客园看到一个帖子,讨论两个整数集合比较的算法问题.呵呵,其实任何整数集合的问题都是可以通过位图算法解决.简单地说,就是把值转化为数组下标,将O(n)复杂度降低到O(1)复杂度来获得最高效率.当然,会牺牲一点点空间. 解决单纯的整数集合比较问题,只是纯理论的.实际上,位图算法可以应用在用户登录之后的接口验证上.服务端的设计其实也没什么复杂的地方,就是维护一个数组罢了.只不过这个数组并非是简单的整数集合,而是一个对象List.这个设计的最大优点是在验证方法中,不是通过find方法而是直接访

01.数据结构概念与算法基础

数据结构概念与算法基础 一.数据结构概念 1.数据:是描述客观事务的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合.数据不仅仅包括整型.实型等数值类型,还包括字符及声音.图像.视频等非数值类型. 2.数据元素:是组成数据的.有一定意义的基本单位,在计算机中通常作为整体处理,也被成为记录.比如畜类中,牛.马.羊都属于数据元素. 3.数据项:一个数据元素可以由若干个数据项组成,数据项是数据不可分割的最小单位.比如人这样的数据元素,可以有眼.耳.鼻等数据项. 4.数据对

Learning Data Structure_1_数据结构绪论和算法

今天回到了杭电,在戴荣学弟的帮助下暂住他的寝室,解决了基本的生活问题,可以多点时间精力开始学习阅读刘志老师给的暑假要求掌握的书籍和知识了. 首先是数据结构,手头上主要是两本教材,一本是严蔚敏等主编的<数据结构(c语言版)>,另一本是程杰编的<大话数据结构>,前者经典严谨,后者通俗有趣,应该是不错的选择.以下是简要的学习内容和笔记. 数据结构绪论 1.数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科. 2.掌握以下概念和术语:数据.数据

数据结构—各类‘排序算法’实现(上)

数据结构中的排序算法分为比较排序,非比较排序.比较排序有插入排序.选择排序.交换排序.归并排序,非比较排序有计数排序.基数排序.下面是排序的具体分类: 1.直接排序 主要思想:使用两个指针,让一个指针从开始,另一个指针指向前一个指针的+1位置,两个数据进行比较 void InsertSort(int* a, size_t size) {      assert(a);      for (size_t i = 0; i < size - 1; i++)      {           int 

数据结构-各类排序算法总结

各类排序算法总结 一. 排序的基本概念 排序(Sorting)是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个项值有序的序列. 有 n 个记录的序列{R1,R2,-,Rn},其相应关键字的序列是{K1,K2,-,Kn},相应的下标序列为1,2,-,n.通过排序,要求找出当前下标序列1,2,-, n 的一种排列p1,p2, -,pn,使得相应关键字满足如下的非递减(或非递增)关系,即:Kp1≤Kp2≤-≤Kpn,这样就得到一个按关键字有序的记录序列{R