美文网首页
信息检索-存储

信息检索-存储

作者: 以梦为马驾驾驾 | 来源:发表于2022-09-14 21:31 被阅读0次

压缩:

  1. variable byte
  2. gamma
  3. zigzag

variable byte
将一个数据拆分为多个编码单位存储, 读的时候读若干个连续的编码单元组成一个数据, 如用一个字节做编码单位, 这个字节的最高位为0表示需要继续读取数据, 另外7个bit表示真实的数据, 需要和之后读取的数据结合起来使用, 当读到的字节的最高位为1, 表示是最后一个编码单元了, 可以将之前读到的数据结合在一起. 在实际中, 也可能用1做延续位标识, 用0作结束标识.

编码单位越大, 操作次数越小, 即解压缩越快, 但是压缩率低. 以8位, 一个字节作为编码单位, 是压缩率与解压缩速度的权衡.
通过1-5个字节来压缩四个字节的数据类型, 如int, 对于数值较小的int具有较好的压缩率, 对于较大的int, 或者负数(最高位-1), 压缩率较低.
例子: 以 0 做延续位标识.

    static List<Byte> encodeNumber(int num) {
//        byte i = (byte) 0x80;
        List<Byte> bytes = new LinkedList<>();
        while (true) {
            Byte b = (byte) (num & 0x7F);  // 获取数据低位
            bytes.add(b);                 // 写入, 数据低位在索引低位
            if ((num >>>= 7) == 0) {
                break;
            }
        }
        int lastOne = bytes.size() - 1;
        Byte aByte = bytes.get(lastOne);
        Byte last = (byte) (aByte + 128);
        bytes.set(lastOne, last);
        return bytes;
    }

    static List<Byte> encodeNumbers(int... nums) {
        List<Byte> bytes = new LinkedList<>();
        for (int num : nums) {
            bytes.addAll(encodeNumber(num));
        }
        return bytes;
    }

    static int[] decodeBytes(List<Byte> bytes) {
        List<Integer> ints = new LinkedList<>();
        int v = 0;
        int count = 0;
        // 先获取的是数据低位
        for (Byte b : bytes) {
            var flag = b & 0x80; // 1000 0000
            var ans = b & 0x7F;
            ans <<= (count++)*7;
            v |= ans;
            if (flag != 0) {
                ints.add(v);
                count = 0;
                v = 0;
            } else {

            }
        }
        return ints.stream().mapToInt(Integer::intValue).toArray();
    }

相关文章

  • 信息检索-存储

    压缩: variable byte gamma zigzag variable byte将一个数据拆分为多个编码单...

  • 信息检索|信息爆炸,我们各取所需

    “信息检索”一词出现于20世纪50年代 ,又称信息存贮与检索、情报检索,是指将信息按一定的方式组织和存储起来,并...

  • Lucene、Elasticsearch、Kibana 入门教程

    信息检索模型 信息检索模型最重要的概念就是倒排索引,倒排索引是搜索引擎中常见的索引方法,用来存储在全文搜索下某个单...

  • ES入门3-全文检索概述

    全文检索定义 全文检索是将存储于数据库中整本书、整篇文章中的任意内容信息查找出来的检索。它可以根据需要获得全文中有...

  • SQL基础入门(理论篇)

    1、什么是数据库 企业数据存储面临的问题: --存储大量数据 --大量数据的检索和访问 --保证数据信息的一致和完...

  • 2020年03月16日 DF-IDF

    信息检索概述 信息检索是当前应用十分广泛的一种技术,论文检索、搜索引擎都属于信息检索的范畴。通常,人们把信息检索问...

  • 学习笔记_2020.02.23

    信息检索_黄如花 怎样利用信息检索省钱

  • 学习笔记CB001:NLTK库、语料库、词概率、双连词、词典

    聊天机器人知识主要是自然语言处理。包括语言分析和理解、语言生成、机器学习、人机对话、信息检索、信息传输与信息存储、...

  • Elasticsearch GEO基本概念 --- 2022-0

    地理信息检索是Elasticsearch的重要特性之一,ES geo主要用于地理信息的存储和搜索。 在实际应用场景...

  • 信息检索

    #师北宸21天写作训练营Vol.1# 信息检索是写作必备的一项技能,是我们建立素材库的基本。 当下的时代,信息传递...

网友评论

      本文标题:信息检索-存储

      本文链接:https://www.haomeiwen.com/subject/predortx.html