标签: run-length-encoding

Python压缩运行长度编码

我试图学习游程长度编码,但是我在网上发现了我做不到的挑战。它要求您编写一个称为compression(strg)的压缩函数,该函数将长度为64的二进制字符串strg作为输入,并返回另一个二进制字符串作为输出。输出二进制字符串应为输入字符串的游程长度编码。

压缩('1010101001010101101010100101010110101010010101011010101001010101')

'1010101001010101 * 4'

这是我所拥有的,但是找不到该模式:

from itertools import *

def compression(strg):
    return [(len(list(group)),name) for name, group in groupby(strg)]
Run Code Online (Sandbox Code Playgroud)

我需要一些帮助来解决这个问题。

python compression image run-length-encoding

3
推荐指数
1
解决办法
3192
查看次数

根据R代码中特定值的运行长度计算变量

我有这样的数据集,

 dat <- data.frame(d1=c(0,1,0,1,0),
      d2=c(0,1,1,1,0),d3=c(1,0,1,1,0),
      d4=c(1,0,0,0,0),d5=c(1,1,1,0,0))
 dat
  d1 d2 d3 d4 d5
1  0  0  1  1  1
2  1  1  0  0  1
3  0  1  1  0  1
4  1  1  1  0  0
5  0  0  0  0  0
Run Code Online (Sandbox Code Playgroud)

如果我认为每一行都是为个人设定的.我想基于run计算一个名为"indicator"的指标变量.例如,对于这个向后运行的长度,单个1运行是(0,0,1,1,1),其中值1是3.另一方面,对于个体3运行是(0,1,1,0, 1),向后运行长度值为1,s为1.所需数据集如下.

  d1 d2 d3 d4 d5 indicator
   0  0  1  1  1   3
   1  1  0  0  1   1
   0  1  1  0  1   1
   1  1  1  0  0   3 
   0  0  0  0  0   0 …
Run Code Online (Sandbox Code Playgroud)

r run-length-encoding

3
推荐指数
1
解决办法
98
查看次数

我可以在不使用逆的情况下获得rle对象的总长度吗?

让我们说我有一个像这样的Rle,长度为10:

b = rle(c("H", "T", "T", "H", "H", "H", "H", "H", "T", "H"))
Run Code Online (Sandbox Code Playgroud)

如何在不使用的情况下获取此对象的长度inverse.rle

length(inverse.rle(b))
# 10
Run Code Online (Sandbox Code Playgroud)

我有一些代表染色体的稀疏Rles,它们可以有数亿的长度,所以我宁愿不使用逆.


akruns答案对我的数据不起作用:

> a
$ mydata
numeric-Rle of length 57442693 with 12471 runs
  Lengths: 2709826     100   31062     100 ...       2     232     100      47
  Values :       0       1       0       1 ...       1       0       1       0

> a$lengths
NULL
Run Code Online (Sandbox Code Playgroud)

r run-length-encoding

3
推荐指数
1
解决办法
173
查看次数

JavaScript 算法:解压缩压缩字符串

我想编写一个函数,它接受压缩的字符串并输出解压缩的字符串。

压缩字符串如a2b2c3和解压缩字符串aabbccc 更多示例是

`a` -> `a`
`ab12` -> `abbbbbbbbbbbb`
`a3b2a2` -> `aaabbaa
Run Code Online (Sandbox Code Playgroud)

我尝试实现它,但对于像这样的压缩字符串来说,它确实很混乱且有缺陷ab12

function isNumeric(num) {
    if (num === '') return false
    if (num === null) return false
    return !isNaN(num)
  }
  

function decompress(compressedStr) {
    const array = compressedStr.split('')
    let prevChar, str = ''
    for(let i = 0; i < array.length; i++) {
        if(i === 0) {prevChar = array[i]}
        if(isNumeric(array[i])) {
            str += prevChar.repeat(Number(array[i]))
            prevChar = null
        } else {
            if(!prevChar) prevChar = array[i] 
            else {
                str …
Run Code Online (Sandbox Code Playgroud)

javascript algorithm run-length-encoding

3
推荐指数
1
解决办法
2347
查看次数

运行长度编码 - SIMD

我正在尝试优化运行长度编码.我在考虑在SIMD中实现它.我花了几个小时在算法上工作,但不能继续下去.是否值得一试?我在做霓虹灯.

谢谢.

jpeg arm simd run-length-encoding neon

2
推荐指数
1
解决办法
1549
查看次数

以独特的方式MATLAB平铺矢量

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

例如:

A   idx output 
2   2    2
3   1    2
4   3    3 
5   1    4
.   .    4
.   .    4
.   .    5 
.    .     .
Run Code Online (Sandbox Code Playgroud)

任何非循环的想法?

matlab tiling vectorization run-length-encoding

2
推荐指数
1
解决办法
73
查看次数

结合无损数据压缩算法

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

让我们仅采用两种更流行的算法:Huffman CodingRun-lenght Enconding

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

Alphabet  = {A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, X, W, Y, Z}
Sequence1 =  SFBJNERUSNJGSDKKDEIJGNMSDJDDSUSJNF
Sequence2 =  MNMNMNREGUHSDFJUF
Sequence3 =  MMMMMNNNNNASDUERJGASIUJMMMNNNUNS
Run Code Online (Sandbox Code Playgroud)

现在,如果我们只用一个固定长度的n比特字对每个符号进行编码,我们就会得到未压缩的序列,即长N比特。

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

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

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

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

编辑: …

compression lossless-compression huffman-code data-compression run-length-encoding

2
推荐指数
1
解决办法
936
查看次数

就地行程长度编码算法

我遇到了一个面试问题:

给定输入String : aaaaabcddddee,将其转换为a5b1c1d4e2.

一个额外的约束是,这需要就地完成,意味着不应该使用额外的空间(数组).

保证编码的字符串始终适合原始字符串.换句话说,字符串abcde就不会出现,因为它将被编码为a1b1c1d1e1占用比原始字符串更多的空间.

一个提示采访者给我的是一次遍历字符串并找到保存的空间.

我有时会陷入困境,不使用额外的变量,输入字符串中的某些值可能会被覆盖.

任何建议将不胜感激?

string algorithm run-length-encoding

2
推荐指数
1
解决办法
1827
查看次数

面试任务.我们如何解决它?

以这种方式转换字符串

let initialString = "atttbcdddd"
// result must be like this "at3bcd4"
Run Code Online (Sandbox Code Playgroud)

但重复次数必须大于2.例如,如果我们有"aa",结果将是"aa",但如果我们有"aaa",结果将是"a3"

还有一个例子:

let str = "aahhhgggg"
//result "aah3g4"
Run Code Online (Sandbox Code Playgroud)

我的尝试:

func encrypt(_ str: String) -> String {

    let char = str.components(separatedBy: "t") //must input the character
    var count = char.count - 1
    var string = ""
    string.append("t\(count)")
    return string
}
Run Code Online (Sandbox Code Playgroud)

如果我输入"ttttt"它将返回"t5"但我应该输入该字符

run-length-encoding swift

2
推荐指数
1
解决办法
219
查看次数

解压缩使用独特压缩形式的文本文件的更快方法

我不知道这种类型的压缩是否在其他地方使用,但这是它的工作原理.它使用4个字符.第一个字符"ú"表示压缩紧随其后.接下来的两个字符在HEX中表示要重复的第四个位置中有多少个.例如:

22ú05hú0C0AFC001

将会:

22hhhhh000000000000AFC001

我能够做到这一点,但它运行得很慢.20k文件可能需要5分钟或更长时间.

这是我的代码:

public string doDecompression(string Content)
{
    string pattern = @"ú...";
    Regex rgx = new Regex(pattern);

    foreach (Match match in rgx.Matches(Content))
    {
        // Gets the raw Hex code
        string hex = match.ToString().Substring(1, 2);

        // Converts Hex code to an Integer 
        int convertedHex = Int32.Parse(hex, NumberStyles.HexNumber);

        // Gets the character to repeat
        string character = match.ToString().Substring(3, 1);

        // Converts the character to repeat into
        // a "char" so I can use it in the line below
        char …
Run Code Online (Sandbox Code Playgroud)

c# compression run-length-encoding

1
推荐指数
1
解决办法
154
查看次数