问题标签 [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.
c# - C#中的运行长度解码器
这里的任何人都可能在 C# 中有一个运行长度解码器吗?我真的需要上述代码。谢谢。
c# - 在奇怪的循环上需要逻辑帮助
我正在尝试创建一个循环,该循环将通过一个字节数组递归并将它们与数组中的下一个字节进行比较(大概使用 for 循环遍历每个条目)。如果两者相同,我需要它来增加一个 int 变量然后继续。如果两者不相同,则需要将 int 变量添加到列表中,后跟其自己的字节值,然后需要“采用”这个新值作为自己的值,并重新开始整个过程,直到数组结束。这是一件非常奇怪的事情,但需要以这种方式完成,这样我才能以正确的顺序和正确的值将 int/byte 对写入文件。
这里关心的是获取相同的连续条目的数量,记下它,然后转到下一个值并重复。例如,如果我们遇到的值 3 与我们无关的值 1 相同。只要我们得到值 3 的连续条目数,我们就完成了我们的工作。
其他几个可能有用的点。
- 在这种情况下,字节值可以跨越 0-255 的整个范围。
- 数组大小可能高达 1.5 亿字节条目,因此效率很重要。
- 可以预先访问数组大小。
- 最后,字节数组是 Struct 中的字节变量。
我希望这是有道理的。提前致谢。
编辑:对不起,如果我之前不太清楚,也许我也应该重新命名这个问题。
为了澄清,我明白我需要在这里做什么,而不是如何去做。所以我想的问题是我如何循环这个比较,然后当我得到一个错误的回报时换掉我正在比较的东西。最重要的是,当我比较的可能有 255 个值而我不知道它们时,我该怎么做。我真的无法想象如何编写代码,所以我只是坐在那里盯着 VS :)
这更有意义吗?如果不是我道歉:)
编辑2:如果有人愿意看的话,这就是我想出的最终结果。它的灵感来自下面的 aligray 代码。
algorithm - 无损分层游程编码
我想总结而不是以与运行长度编码类似的方式进行压缩,但在嵌套的意义上。
例如,我希望: ABCBCABCBCDEEF 变为: (2A(2BC))D(2E)F
我不担心在两个相同的可能嵌套之间选择一个选项,例如
ABBABBABBABA 可以是 (3ABB)ABA 或 A(3BBA)BA,它们具有相同的压缩长度,尽管具有不同的结构。
但是我确实希望选择是最贪婪的。例如:
ABCDABCDCDCD 将选择 (2ABCD)(3CD) - 原始符号中长度为 6 的长度小于原始符号中长度为 8 的 ABCDAB(4CD)。
在背景方面,我想总结一些重复的模式。让数据更易消化。我不想破坏数据的逻辑顺序,因为它很重要。但我确实想总结一下,比如符号 A 出现 3 次,然后是符号 XYZ 出现 20 次等等,这可以在视觉上以嵌套的方式显示。
欢迎提出想法。
java - 压缩排序集执行
我需要以节省空间的方式在实现中存储大量Long
值。SortedSet
我正在考虑位集实现并发现了Javaewah。但是,API 需要int
值而不是long
s。
任何人都可以推荐任何替代方案或提出解决此问题的好方法吗?我主要关心空间效率。在构建集合时,我需要访问一次最小和最大元素。然而,访问时间并不是一个大问题(即完全运行长度编码的实现就可以了)。
编辑
我应该清楚,如果我可以访问集合的最小和最大元素,则实现不必实现接口。SortedSet
math - 二进制游程编码
我有一个 Web 表单,我想在 Base64 中为其内容生成一个简短的表示。除其他外,该表单包含 264 个二进制值的列表,其中大部分将在任何时候为 0。(它们代表地理地图上的区域)。即使在 Base64 中,这个 264 位数字也会生成一个长而令人生畏的字符串。我想尽可能高效地实现游程编码。你能帮我解决这个问题吗?我用谷歌搜索了二进制 RLE,但没有发现任何用处。
我已经尝试了这么远- 使用十进制计数和“A”作为分隔符在二进制字符串上运行 RLE,表示 0 和 1 之间的变化,然后将结果从基数 11 转换为基数 64。例如:
变成
这反过来变成
或者,以 62 为基数,
更好,但我仍然不禁怀疑我是否做错了什么 - 使用数字“A”作为分隔符是最好的方法吗?
另一个更新:
感谢@comingstorm,我又缩短了压缩字符串。
正如我在评论中提到的那样,实际用例通常会导致字符串更短。
c++ - 符号序列的 C++ 和 RLE
我对如何在符号序列上使用 RLE 有困难。
例如,我可以对像这样的字符串进行 RLE 编码
这将转换为:
但我想对像这样的字符串执行 RLE
这将转换为:
有没有办法达到它?这项工作变得更容易一些,因为长字符串总是在括号中。可以给出建议在 C++ 中执行此操作吗?
如果有比使用括号更好的存储值的方法,如果您推荐我,那也很棒。
java - RLE序列,设置一个值
假设我有一个任意的 RLE 序列。(不知道的人,RLE把[4 4 4 4 4 6 6 1 1]这样的数组压缩成[(5,4)(2,6)(2,1)]。首先是a的个数运行中的特定整数,然后是数字本身。)
如何确定算法以在给定索引处设置值而不解压缩整个事物?例如,如果您执行 set(0,1),则 RLE 将变为 [(1,1) (4,4) (2,6) (2,1)]。(在set中,第一个值是索引,第二个是值)
此外,我已将此压缩序列划分为 ArrayList of Entries。也就是说,每个条目都是以下之一: (1,1) 它具有数量和价值。
我正在尝试找到一种有效的方法来做到这一点,现在我可以想到的方法有太多的 if 语句被认为是干净的。有很多可能的变化:例如,如果给定值拆分现有条目,或者它与现有条目具有相同的值,等等......
任何帮助将非常感激。我现在正在研究一种算法,这里是其中的一些:
如您所见,这变得越来越草率...
谢谢!
c++ - RLE:由两个符号编码
我创建了 RLE 编码函数,它将像“A1A1B7B7B7B7”这样的序列编码为这样的字符串:“#A12#B74”。
但是,功能并没有我需要的那么快。这是函数的第二个版本,我已经对其进行了改进以使其更快,但仍然太慢。你有什么想法可以改进吗?我缺乏想法。
matlab - 连续数字系列(不同长度)
如果有人向我展示了一种简单的方法,我将不胜感激。假设我在 MATLAB 中有一个向量,例如
我想找到连续数字“twos”的系列以及这些系列的长度。
数字二很容易找到x=find(d==2)
。但我想要的是得到一个包含所有连续数字二序列长度的向量,这意味着我在这种情况下的结果将是这样的向量:
有谁能帮助我吗?