`
杨杨和花花
  • 浏览: 22478 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Bitmap在排重问题上的应用

阅读更多
   其实这篇,我已经写了好久,只是一直没发。因为里面还有一些问题,我还没有解决。但是我想学习本来就是一个更新的过程,总有一些我们是不懂的。于是我决定还是展示出来。供大家学习和讨论。

问题的引入:例题:有很多个整数,排除其中重复的数。 要求:尽可能的节省空间、
要想解决此问题,重在存储这些整数。我们通过什么样的结构来存储?
问题的解决的构思:创建一个byte数组,其中每一个元素的8位分别对应元素出现的情况、我们用1表示该对应的
数出现了,0表示没有出现。然后我们遍历整个情况,对于标记1的数都取一个。这些数就是排重过后剩下的数。
问题的具体实现:假设整数的个数为n.我们开辟的byte数组的大小为(n/8+1)。n%8这为byte数的第几位数。
我定义一个排重类:
public class PaiChong {
/*
* 通常先执行常量的初始化,然后执行构造方法
*/
byte a[];
public PaiChong(int b){
a=new byte[b/8+1];//开辟这么大的空间
}
/**
*
* @param x 为你输入的数
*/
public void Fuzhi(int x){
int i,j;//分别作为标记
i=x/8;
j=x%8;
byte y=0;
    byte r[]=ChangeStr(a[i]);
if(j==0)
r[7]=1;
else
r[j-1]=1;
for(int k=0;k<8;k++){
y*=2;
y+=r[k];
}
a[i]=y;
}
/**
*
* @param y 你传入需要改变的数
* @return  返回字符数组
*/
public byte[] ChangeStr(byte y){
byte[] s=new byte[8];//定义长度为8的字符数组
    int t=y;
    int w=0;
int i=0; 
for(;i<7;i++){  
if(t<=1){ 
s[7-i]=(byte) t;
break;//跳出循环
}
    int h=t;
t=(t/2);
w=h-t*2;//记录余数
    s[7-i]=(byte) w;
}
for(int k=i+1;k<8;k++){
s[7-k]=0;
}
return s;
}
public void SystemByte(){
for(int i=0;i<a.length;i++){
System.out.print(a[i]+",");
}
}
}
      在这个类中,Fuzhi这个方法:将待排重的数,进行判断。并修改,对应位上的值。ChangeStr这个方法:
      将byte数转化为一个byte数组,再对byte数组中元素进行操作。以上的代码并没有实现我预期的目标。
      代码中出现一些问题:我们改动这个数,可能会超出byte的范围。从而它自动将其转化为负数。还有对于
      负byte数转化为二进制的方法。
      还有值得考虑的地方,这样的做法是否减少复杂度?如何通过移位对byte的8位数进行操作?
      以及将byte数组变成int数组又会怎么样?
分享到:
评论

相关推荐

    高级数据结构及应用之使用bitmap进行字符串去重的方法实例

    在高级数据结构及应用中,使用Bitmap进行字符串去重是一种常用的方法,这种方法可以快速判断某字符是否出现过,从而实现字符串去重。通过选择合适的底层数据结构,可以提高字符串去重的效率。在实际应用中,我们可以...

    Doris的用户画像人群应用.pdf

    标签索引应用在Doris基础实现中存在一些问题,如性能问题、计算效率问题等。这些问题可以通过使用Roaring Bitmap和分布式计算来解决。 7. Roaring Bitmap在Doris中的应用 Roaring Bitmap是Doris中的一个重要组件,...

    Android自定义view实现电影票在线选座功能

    preScale是在当前Matrix的基础上增加缩放,而postScale则是在缩放之后再应用当前的Matrix。通过这两个方法的不同组合,我们可以实现手指触摸屏幕时座位图的放大和缩小效果。 接下来是手势检测。Android提供了...

    CTP出版中的常见问题.pdf

    CTP出版中的常见问题 CTP(Computer to Plate)技术的日益成熟...已修改好的应用文件,如果没有及时在蓝纸或大版文件中更新,那么输出时用的就是旧文件,印刷出来的仍是旧内容。一般这属于 CTP 系统的管理规范化问题。

    apache doris 从部署到应用全解

    Rollup 和查询优化是提高性能的关键,Doris 支持多种索引类型,如倒排索引、BloomFilter 索引和 Bitmap 索引,这些索引在数据查询中起着至关重要的作用。倒排索引和 BloomFilter 索引能显著提升查询速度,而 Bitmap ...

    BlackBerry 上不同的消息提醒方法

    这种变化通常体现在应用程序图标右上角出现一个小标记,比如一个红色的星号。 **示例代码:** ```java // 更新应用程序图标为已读 Bitmap icon = Bitmap.getBitmapResource("icon/read.gif"); ...

    大数据处理算法.pdf

    例如,给 20 亿个不重复的 unsigned int 的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那 40 亿个数当中,并且所耗内存尽可能的少?可以使用 Bitmap 算法来解决这个问题。 在 Java 中,可以使用 ...

    高并发高可用的电商平台架构

    - **倒排索引**:在搜索引擎中广泛应用,实现从单词到文档的高效映射。 - **Bitmap**:适用于海量数据统计计算,通过位操作优化存储空间和访问速度。 **2. 并行与分布式计算** - **任务切分与分而治之(MR模型)*...

    大数据的一些面试题.pdf

    综合这些知识点,面试时可能会遇到的具体问题包括:在内存有限的情况下,如何统计大量数据的不重复元素、计算中位数、建立索引、实现倒排索引、外排序处理大文件、用Trie树去除重复字符串、以及利用MapReduce进行...

    在任意类型的窗口上添加工具条

    在PowerBuilder中,可以设置`CToolButton`对象的`Bitmap`属性来指定图标。这些图标可以代表退出、打开、保存、缩放等常用功能。例如,`large-exit.bmp`可能表示关闭应用的图标,`large-open-gs.bmp`可能表示打开文件...

    分布式高并发.pdf

    BitMap和Bloom Filter是解决大型数据问题的有效方法,包括BitMap的基本思想、BitMap应用之快速排序、快速去重、快速查询、BitMap扩展——Bloom Filter等。 十三、限流算法 限流算法包括计数器法、滑动窗口、漏桶...

    ANDROID 获取最近的相片的缩略图

    通过研究和理解这个代码,开发者可以更好地掌握如何在Android应用中正确处理图片缩略图的获取和展示,同时解决可能出现的问题。 总之,获取Android设备上的最近相片缩略图需要正确查询MediaStore,按时间排序,并...

    编程常用英语.doc

    - **应用场景**: 在开发过程中,无论是桌面应用还是移动应用,都需要对应用进行设计、编码、测试等一系列工作。 #### 2. Application Framework (应用程式框架) - **定义**: 应用程序框架是指提供了一套预先定义好...

    javaptyx_java_android_

    在Android应用开发中,Java是最常用的语言之一,因此这个项目很可能是用Java编写的,用于创建运行在Android设备上的互动拼图游戏。 【描述】"Android java拼图游戏" 描述了这个项目的具体类型。拼图游戏是一种常见...

    Lucene 原理 介绍

    4. **倒排段**:多个倒排列表可以组成一个倒排段(Inverted Segment),这是为了提高检索效率,将相关文档聚在一起处理。 5. **位图索引**:为了加速文档集合的过滤,Lucene还使用了位图索引(Bitmap Index),如...

    亿万级数据处理的高效解决方案.docx

    5. **分布式处理**: Hadoop和MapReduce是大规模数据处理的主流框架,它们将数据分布在多台机器上进行并行处理,显著提升了处理效率。Hadoop的HDFS提供了分布式文件系统,MapReduce则定义了数据处理的计算模型。 在...

    文本快速搜索工具

    文本快速搜索工具是一种高效能的检索应用程序,专为在大量文本文件中查找特定内容而设计。这类工具在处理大量数据时能显著提高工作效率,尤其适用于需要频繁搜索和分析文本信息的场景,例如日志分析、代码查找或者...

    2-3+新⼀代极速MPP数据库:DorisDB.pdf

    通过丰富的索引机制,如前缀索引和Bitmap倒排索引,DorisDB优化了数据过滤速度,尤其在处理前缀Key列和多列过滤场景时表现优秀。前缀索引基于排序列,索引粒度为1024行,键长度为36字节。Bitmap索引则擅长处理后缀...

    实时OLAP数据仓库架构优化演进

    1. 原有架构中维度组合膨胀问题:通过在应用层采用固定(两级)的维度组合存放在Redis中,以及在Mysql中按照维度组合分表,可以一定程度上解决这个问题,但仍有改进空间。 2. 如何支持GroupBy查询:这个问题通过...

    asp.net 算法题

    综上所述,算法在ASP.NET开发中占据着核心地位,从数据处理到安全性提升,再到性能优化,算法的应用贯穿于整个开发流程。掌握并熟练运用各种算法,不仅能够提升开发效率,还能显著增强应用的功能性和用户体验。因此...

Global site tag (gtag.js) - Google Analytics