问题标签 [run-length-encoding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1549 浏览

c - C-运行长度编码不适用于大文件,适用于较小的文件

我有一个问题,当我在一个 41 kb 的文件上使用它时,它被压缩(尽管因为它使用运行长度编码,它似乎总是使文件大小加倍)并正确解压缩。但是,当我尝试在一个 16,173 kb 的文件上使用它并解压缩它时,它没有打开,文件大小为 16,171 kb ......所以它解压缩了它,但它没有恢复到原来的形式.. ..有些事情搞砸了....让我感到困惑,我似乎无法弄清楚我做错了什么....

使用的方法是游程编码,它将每个字节替换为后跟字节的计数。

前:

46 6F 6F 20 62 61 72 21 21 21 20 20 20 20 20

后:

01 46 02 6F 01 20 01 62 01 61 01 72 03 21 05 20

这是我的代码:

0 投票
1 回答
251 浏览

sql - 运行长度编码数据的最佳方法

我已经创建了一个表格,可以随时间跟踪对象的各种属性。

每天都有新数据(约 10 万条记录)出现。我想要做的是将每条记录与该 id 的当前数据进行比较,然后:

a) 如果属性匹配,什么也不做。b) 如果属性不同,则更新当前记录,使 EndDate 为当前日期,并使用新属性创建新记录。c) 如果该 id 没有任何数据,则创建一条新记录。

我的问题是,最有效的方法是什么?

我可以编写一个脚本来遍历每条记录,进行比较,并酌情更新表格,但我觉得这是蛮力,而不是智能解决方案。

这是使用游标的好地方吗?

0 投票
1 回答
74 浏览

matlab - 以独特的方式平铺向量 MATLAB

考虑A = [ 200000 x 1]向量。我有另一个向量idx = [200000x1]。我想平铺A使得ithA 的每个元素都是平铺idx(i)时间。

例如:

任何非循环的想法?

0 投票
3 回答
763 浏览

sql - 为运行长度编码选择连续行

我有一些巨大的值和日期表,我想使用运行长度编码对其进行压缩。(对我来说)最明显的方法是选择所有不同的值组合,以及最小和最大日期。这样做的问题是它会错过任何映射停止然后重新开始的实例。

将以这种方式编码为

这显然是错误的。

我想要的是一个查询,它将返回每组值存在的每组连续日期。

或者,如果我向后看这个屁股,任何其他建议都将不胜感激。

0 投票
3 回答
64 浏览

matlab - 来自具有组中元素数的向量的组索引向量

我想从包含每个组中元素数量的向量创建一个包含每个元素的组标识符的向量。

例子:

我正在寻找如下向量:

我找到了一个涉及循环的解决方案:

但这似乎不是很优雅。欢迎任何改进建议。

0 投票
2 回答
808 浏览

java - 模式游程编码

我正在尝试找到最简洁的方法来执行基于模式的游程编码。目标是通过分解由几个相同模式组成的子字符串来压缩字符串。

原始字符串:

如您所见,有 4 个 " {3}" 模式。可以通过将 4 个 " {3}" 模式的运行表示为$4{3}.

我想获得的压缩字符串:

我试过这个String.replaceAll(regex, replacement)方法。我知道myString.replaceAll("\\{([^<])\\}", "$1")它只能用它的值替换整个模式,但我找不到如何使用正则表达式检测和计算相同模式的运行长度。

使用正则表达式是个好主意还是有其他“更好”的方法来做到这一点?

0 投票
1 回答
1014 浏览

compression - 结合无损数据压缩算法

我想知道我们可以在多大程度上进行无损数据压缩;我无法找到无损算法的在线模拟器来执行一些经验测试。我可以自己做一个,但不幸的是我这段时间没有足够的时间;我仍然对我的直觉感到好奇,我将对其进行解释。

让我们只看两个更流行的算法:Huffman CodingRun-lenght Enconding.

假设我们有一个数字A符号的字母表和该字母表中任意长的符号序列:例如:

现在,如果我们只用固定长度的n比特字对每个符号进行编码,我们就有了未压缩的序列,也就是长的N比特。

如果我们使用 Huffman 对序列进行编码,我们将使用H位而不是N位,从而节省(1-H/N)*100%位空间。

如果我们使用 RLE 编码相同的序列,我们将使用R位,节省(1-R/N)*100%.

我想知道,如果我们应用RLE + Huffman或者Huffman + RLE我们可以比只使用其中一个来节省更多空间会发生什么。

这对我来说似乎是一个非常基本的想法,但谷歌搜索我没有找到任何关于这个主题的有趣内容。

编辑:嗯,我可能没有考虑到如果我先使用 RLE,我将无法使用 Huffman,因为与单个符号的固定长度代码的对应关系会丢失;但仍然应该可以先使用 Huffman,然后再使用 RLE。

顺便说一句,我对其中的逻辑很感兴趣,我的意思是串联使用多个无损压缩算法。

编辑 2:当我在评论 Mark Adler 的回复时,我意识到我可能已经找到了我的问题的答案。就是这个:

哈夫曼,这是一个符号到符号的代码,如何影响检测?

假设我们有以下代码:AABCABAAB. 在纯二进制中,它将被编码为00 00 01 10 00 01 00 00 01(obv 空格仅出于可读性目的)。霍夫曼将其编码为0 0 11 10 0 11 0 0 11. 空格更多地显示了字符串是如何没有改变的,因此可以检测到完全相同的重复数量,假设我们正在处理这个范围内的代码(符号方面)。

这让我想到了另一点(鉴于这已经是很长的评论,我不会在这里讨论):逐位分析代码。

所以,我实际上认为我得出了一个结论:正如我们所知,任何字典(或基于替换的)编码器将可变数量的符号分组为固定长度的码字,而 Huffman(或任何其他熵编码器)编码固定长度的符号成可变数量的比特,从而将熵逼近到最小值;因此,让霍夫曼先运行是没有意义的(而且只会浪费计算),因为另一种算法很可能会引入更多霍夫曼可以减少的冗余。

当然这只是一篇理论论文,因为在实践中我们可以考虑其他因素(例如计算时间)......更不用说要编码的字符串的不同配置可能导致不同结果的事实。但是,嗯……这对我来说很有意义。:)

0 投票
1 回答
272 浏览

java - 尝试用java编写一个简单的编译器(我正在使用notepad ++)

我的问题是如何编写一个简单的编译器,就像传真机中使用的编译器一样,它将 aaaavvvvvddddddddddd 转换为 4a5vBd。

另外,我得到“假设”,输入的任何字符串都不包含大写字母和数字,并且任何字符串将包含少于 61 个任何类型的字符,因此,我假设没有人会输入 64 continue a's in我的程序。

这是据我所知

我假设我需要使用一个循环,但我不知道应该用什么来计算重复的字母,然后告诉有多少该类型的字母在一行中。现在我只寻求建议而不是代码,因为我想这样做,但是作为一个初学者,我的 Java“词汇”现在还不是很大。

任何建议/提示将不胜感激。

此致 特里普斯先生

好吧,我回来了,看来我的代码在这里只打印出 147。无论我输入什么,我总是会得到 147。我试图手动跟踪我的所有变量,但是当我这样做时,我得到了我想要的,而且我的逻辑一定有一些错误。有什么想法吗?

再次感谢你!

0 投票
3 回答
814 浏览

matlab - 重复向量的元素

我有一个A包含元素的值向量i,例如:

A = [0.1 0.2 0.3 0.4 0.5];r = [5 2 3 2 1];

现在我想创建一个新的向量Anew,其中包含r(i)重复的值iA使得第一个r(1)=5项目Anew 具有值A(1)并且新向量的长度是sum(r)。因此:

Anew = [0.1 0.1 0.1 0.1 0.1 0.2 0.2 0.3 0.3 0.3 0.4 0.4 0.5]

我确信这可以通过for结合 eg的精心设计的循环来完成repmat,但是有人知道如何以更流畅的方式做到这一点吗?

0 投票
1 回答
203 浏览

matlab - 矩阵中常数连续值的索引,以及常数值的数量

我有一个矩阵,其连续值随机分布在整个矩阵中。我想要连续值的索引,此外,我想要一个与原始矩阵大小相同的矩阵,其中连续值的数量存储在连续值的索引中。例如

我一直在努力寻找解决这个问题的方法。它与气象数据质量控制相关。例如,如果我有一个来自多个传感器的温度数据矩阵,并且我想知道哪些天具有恒定的连续值,以及有多少天是恒定的,那么我可以将数据标记为可能有错误。

温度矩阵是天数 x 站数,我想要一个输出矩阵,它也是天数 x 站数,其中连续值被标记为如上所述。

如果您对此有解决方案,请提供!谢谢你。