【问题标题】:Efficient way to encode bit-vectors?编码位向量的有效方法?
【发布时间】:2012-10-13 22:21:51
【问题描述】:

当前使用运行长度编码对位向量进行编码,当前运行时间为 2log(i),其中是运行的大小。是否有另一种方法可以将其降低到 log(i)? 谢谢。

【问题讨论】:

    标签: performance optimization encoding bitmap bitvector


    【解决方案1】:

    编码位向量的最有效方法是隔离位源的任何特定属性。如果它是完全随机的,则没有真正明显的增益(实际上,完全随机的比特流无法以任何方式压缩)。

    如果您可以在比特流中找到属性,您可以尝试定义向量集合,这些向量将定义向量空间的基础。在这种情况下,结果将非常有效。

    我们需要有关您的比特流的更多详细信息。


    (编辑)

    再多看几个细节就可以理解前面的语句了: “不能以任何方式压缩完全随机的比特流”

    如果“压缩”是指“转换/压缩流”加上“向量基定义”加上,则不可能压缩完全随机的位向量> 解压程序。但在大多数情况下,解压缩程序(通常也是矢量库)嵌入在客户端软件中。因此,只需要“压缩流”。

    一个很好的解释(和有趣的故事)是Patrick Craig 5000$ compression challenge

    更科学的theory of information, especially entropy section

    最后一个,the full story

    但无论解决方案是什么,如果您有未知数量的未知流要压缩,您将无能为力。你必须找到一个模式。

    【讨论】:

    • 好的,这对我来说是一个假设的情况(这里没有位源)。这实际上是为了我即将进行的测试。在我有一个类似于 000000010000 的位向量的情况下,如果我使用运行长度编码,我会得到 110 111(110 是我接下来必须查看的位数,111 是零数的整数表示,后跟一个运行。)这大致相当于 2log(i)。但是有些事情告诉我有一种方法可以将其减少到更接近 log(i)。希望能解决问题
    • 您的“2log(i)”似乎只是对那个例子的观察。整个算法似乎平均为 O(log(i))。您必须在最坏/最佳情况下分析此问题,以估计 RunLength 算法的复杂性(或效率取决于您正在测量的内容)。也许看看“霍夫曼编码”,可能会导致一些有趣的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    相关资源
    最近更新 更多