首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python使用游程编码查找最小长度压缩字符串,我们可以删除n个连续字符以获得最小长度

Python使用游程编码查找最小长度压缩字符串的方法是通过遍历字符串,统计连续字符的个数,并将连续字符的个数和字符本身进行编码。然后根据编码后的字符串长度,找到最小长度的压缩字符串。

具体步骤如下:

  1. 初始化一个空字符串compressed,用于存储压缩后的字符串。
  2. 遍历原始字符串,使用一个计数器count记录当前连续字符的个数。
  3. 当遇到不同的字符或者遍历到字符串末尾时,将当前字符和计数器count进行编码,并将编码后的字符串添加到compressed中。
  4. 如果编码后的字符串长度大于原始字符串长度,则不进行压缩,直接将原始字符添加到compressed中。
  5. 继续遍历原始字符串,重复步骤2-4,直到遍历完整个字符串。
  6. 返回compressed作为最小长度压缩后的字符串。

下面是一个示例代码:

代码语言:txt
复制
def run_length_encoding(s):
    compressed = ""
    count = 1

    for i in range(1, len(s)):
        if s[i] == s[i-1]:
            count += 1
        else:
            compressed += s[i-1] + str(count)
            count = 1

    compressed += s[-1] + str(count)

    if len(compressed) >= len(s):
        return s
    else:
        return compressed

# 测试示例
s = "aaabbbcccdd"
compressed_string = run_length_encoding(s)
print(compressed_string)

输出结果为:a3b3c3d2

在这个例子中,原始字符串为"aaabbbcccdd",经过游程编码压缩后得到最小长度的压缩字符串"a3b3c3d2"。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云移动开发(移动推送、移动分析、移动测试等):https://cloud.tencent.com/product/mobile
  • 腾讯云数据库(MySQL、Redis、MongoDB等):https://cloud.tencent.com/product/db
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Tencent XR):https://cloud.tencent.com/product/xr

请注意,以上链接仅供参考,具体产品选择应根据实际需求和情况进行评估。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ZIP压缩算法详细分析及解压实例解释(下)

PK于是先进行了一下游程编码。在说什么是游程编码之前,我们谈谈PK对CL序列的认识。...6,16,11,16,00表示6后面还连续跟着66,再跟着36;因为连续的0出现的可能很多,所以用17、18这两特殊的数专门表示0游程,17后面跟着3比特分别记录长度为3-10(总共8种可能)的游程...因此,这里实际上只出现了两种重复字符串长度,即3和4。回顾这个图可以更清楚: ?...主要区别有两点: 1)标准LZ77在找到重复字符串时输出三元组(length, distance, 下一未匹配的字符)(有兴趣可以关注LZ77那篇论文);Deflate在找到重复字符串时仅输出双元组(...对于上面这个例子,标准LZ77在滑动窗口中查找最长匹配字符串,找到的是”the”与前面的there的前三字符匹配,这种贪婪解析方式逻辑简单,但编码效率不一定最高。

2.6K60

15.计算机科学导论之数据压缩学习笔记

WeiyiGeek.游程长度编码示例 温馨提示:用4位二进制压缩时,如果连续的0多于15,它们将被分为2组或者更多的组。...简单的说,该算法是基于字典的自适应编码的思想,在通信会话的时候它将产生一字符串字典(一表),如果接收和发送双方都有这样的字典,那么字符串可以由字典中的索引代替, 减少通信的数据传输量。...首先,怎样为每一次通信会话产生一字典(由于字符串长度不定,很难找到通用的字典)? 其次,接收方怎样获得发送方的字典(如果同时发送字典,就增加了额外的数据,这样,与我们压缩的目的是相悖的)?...首先,算法从未压缩字符串中选取最小的子字符串,这些子字符串在字典中不存在。 然后,将这个子字符串复制到字典(作为一新的记录)并为它分配一索引值。...例如,下图所示JPEG在压缩阶段通常使用游程长度编码压缩从Z字形线性化读取的位模式。

95020

VBA解压缩ZIP文件02——压缩过程

length和distance是成对出现的,就是用2数字来代表一些Byte,比如(仅仅是举例说明原理): ? 后面的10长度字符,就是2数字代表了,这样就达到了压缩效果。...权值作为N叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。...就是使用游程编码对CL1和CL2中的数字进行了进一步的压缩,主要的思想就是用1特殊的数字来代表N重复的数字。...因为Code Length的数字范围是0-15,所以这里又规定了3特殊的数字: 16表示除了0以外的其它游程,2比特,记录连续的3-6 17表示0游程,3比特,记录连续的3-100 18表示0游程...,7比特,记录连续的11-1380 这样处理之后,CL1和CL2就转换为了0-18的数字,数组的长度就被压缩了,压缩后的数组记做SQ1和SQ2(Sequence),数组的值是0-18的数字(解压的时候得到这个数字后

2.1K20

干货 | 携程百亿级缓存系统探索之路——本地缓存结构选型与内存压缩

因此,一长度N的哈希桶数组的占存大小就会是: 8(对象头标识位)+ 4(类型指针)+ 4(数组长度 + 4 (实体引用)*N (实体数量)字节 + 对齐字节。...若数据存在大量的数据连续且重复的情况,就可以考虑使用RLE以降低内存。 比如,一内部存储了4连续的a与6连续的b的字符串经过游程编码后为a4b6。那么,该字符串长度就从10字节减少至4字节。...下例为原始数据为整型Key查询长字符串Value的场景。首先,将重复的字符串实体数据提取出来,将其单独作为一实体字典进行存储。该字典Key为一指针,Value则为提取出的不重复的字符串数据。...在日期相对连续的情况下,取所有日期的最小值为开始日期,数据生效日期到开始日期的差值为新字典的Key。...1)使用位图编码对可枚举字段进行数据压缩 我们将房型数据实体上包括布尔型、枚举以及部分字符串等所有可以枚举的字段进行了位图编码,大幅降低了单个实体的占存大小。

1.1K20

干货 | 携程百亿级缓存系统探索之路——本地缓存结构选型与内存压缩

因此,一长度N的哈希桶数组的占存大小就会是: 8(对象头标识位)+ 4(类型指针)+ 4(数组长度 + 4 (实体引用)*N (实体数量)字节 + 对齐字节。...若数据存在大量的数据连续且重复的情况,就可以考虑使用RLE以降低内存。 比如,一内部存储了4连续的a与6连续的b的字符串经过游程编码后为a4b6。那么,该字符串长度就从10字节减少至4字节。...下例为原始数据为整型Key查询长字符串Value的场景。首先,将重复的字符串实体数据提取出来,将其单独作为一实体字典进行存储。该字典Key为一指针,Value则为提取出的不重复的字符串数据。...在日期相对连续的情况下,取所有日期的最小值为开始日期,数据生效日期到开始日期的差值为新字典的Key。...1)使用位图编码对可枚举字段进行数据压缩 我们将房型数据实体上包括布尔型、枚举以及部分字符串等所有可以枚举的字段进行了位图编码,大幅降低了单个实体的占存大小。

97530

普林斯顿算法讲义(三)

如果有向图有多个拓扑排序,那么可以通过交换一对连续顶点来获得第二拓扑排序。 2-可满足性。...5.4 正则表达式 介绍了一种称为 grep 的基本搜索工具,我们用它来搜索不完全指定的子字符串。 5.5 数据压缩 介绍了数据压缩我们试图将字符串的大小减少到最小。...**编写一程序 Squeeze.java,该程序接受一字符串作为输入,并删除相邻的空格,最多保留一空格。 **删除重复项。**给定一字符串,创建一字符串,其中删除所有连续的重复项。...Huffman:固定长度符号的变长编码。LZW:变长字符串的固定长度编码。 通用压缩算法。 不可能压缩所有文件(通过简单计数论证)。直观论证:压缩莎士比亚的生平作品,然后压缩结果,再次压缩结果。...假设我们有一组满足不等式 sum_i = 1 to N 2^(-ni) ≤ 1 的整数 n1, n2, …, nN。证明总是可以找到一编码长度n1, n2, …, nN 的前缀自由编码

11610

LeetCode 700题 题解答案集合 Python

删除链表的倒数第N节点 19 删除链表的倒数第N节点 LeetCode-Python-20. 有效的括号 20 有效的括号 LeetCode-Python-21....最常见的单词 819 最常见的单词 LeetCode-Python-820. 单词的压缩编码(字典树 Trie Tree) 820 单词的压缩编码 LeetCode-Python-821....比较字符串最小字母出现频次(数组 + 字符串 + 二分查找) 1170 比较字符串最小字母出现频次(数组 + 字符串 LeetCode-Python-1170.比较字符串最小字母出现频次 1170 比较字符串最小字母出现频次...比较字符串最小字母出现频次(数组 + 字符串 + 二分查找) 1170 比较字符串最小字母出现频次 LeetCode-Python-1171.从链表中删去总和值为零的连续节点 1171 从链表中删去总和值为零的连续节点...解压缩编码列表(模拟法) 1313 解压缩编码列表 LeetCode-Python-1315.

2.3K10

JPEGExifTIFF格式解读(1):JEPG图片压缩与存储原理分析

值选得过大,可以大幅度提高压缩比,但是图像质量就比较差;反之,质量因子越小(最小为1),图像重建质量越好,但是压缩比越低。对此,ISO已经制定了一组供JPEG代码实现者使用的标准量化值。...编码 从前面过程我们可以看到,颜色转换完成到编码之前,图像并没有得到进一步的压缩,DCT变换和量化可以说是为编码阶段做准备。...基线JPEG允许的零游程最大长度是16。如果这里的零超过16,那么这个游程分成几个长度为16的零游程。...其中第一部分是一特殊的数据,它用来标识是否是 Exif, 其值是ASCII 字符 "Exif" 和 两0x00字节 的组合字符串....取这个长度的数据解析为TIFFdata数据,exif直接解析为字符串貌似也没有问题。

3K11

JPEGExifTIFF格式解读(1):JEPG图片压缩与存储原理分析

值选得过大,可以大幅度提高压缩比,但是图像质量就比较差;反之,质量因子越小(最小为1),图像重建质量越好,但是压缩比越低。对此,ISO已经制定了一组供JPEG代码实现者使用的标准量化值。...编码从前面过程我们可以看到,颜色转换完成到编码之前,图像并没有得到进一步的压缩,DCT变换和量化可以说是为编码阶段做准备。...基线JPEG允许的零游程最大长度是16。如果这里的零超过16,那么这个游程分成几个长度为16的零游程使用DPCM对直流系数(DC)进行编码DCT系数量化之后,通过差分编码对量化后的DC系数编码。...其中第一部分是一特殊的数据,它用来标识是否是 Exif, 其值是ASCII 字符 "Exif" 和 两0x00字节 的组合字符串.在 APP1 标记域的后面是, 跟随着其他的 JPEG 标记exif...取这个长度的数据解析为TIFFdata数据,exif直接解析为字符串貌似也没有问题。

1.4K10

Python 最常见的 120 道面试题解析

python 中的生成器是什么? 你如何把字符串的第一字母大写? 如何将字符串转换为全小写? 如何在 python 中注释多行? Python 中的文档字符串是什么? 目的是什么,不是和运营商?...python numpy 比列表更好吗? 如何在 NumPy 数组中获得 N 最大值的索引? 你如何用 Python / NumPy 计算百分位数? NumPy 和 SciPy 有什么区别?...检查给定数字n是否为2或0的幂 计算将A转换为B所需的位数 在重复元素数组中查找非重复元素 找到具有相同设置位数的下一较大和下一较小的数字 95.给定n项目的重量和值,将这些物品放入容量为W的背包中...确定通过切割杆和销售件可获得的最大值。 给定两个字符串str1和str2以及可以在str1上执行的操作。...查找所需的最小编辑数(操作)将'str1'转换为'str2' 给定0和1的二维矩阵,找到最大的广场,其中包含全部1。 找到两者中存在的最长子序列的长度

6.3K20

【愚公系列】软考中级-软件设计师 018-数据结构(二叉树的分类)

Trie树(前缀树):用于字符串的存储和搜索,每个节点代表一字符串字符,从根节点到叶子节点的路径表示一完整的字符串。...通过这种方式,可以实现最小编码的平均长度,从而达到最优的压缩效果。...最优二叉树可以应用在哈夫曼编码中,通过树的路径来表示字符编码,使得频率高的字符编码较短,频率低的字符编码较长,从而实现压缩数据的效果。相关概念如下:路径:树中一结点到另一结点之间的通路。...插入操作也非常简单,只需要在合适的位置创建一新的节点,并调整树的结构保持其有序性。对于查找二叉树的时间复杂度,最好的情况下是O(logn),最坏的情况下是O(n),其中n是树中节点的个数。...平衡二叉树的一重要性质是它的高度是O(log n),其中n是二叉树中节点的数量。平衡二叉树的结构使得在插入、删除查找等操作时,可以保持树的平衡性,从而保证了操作的时间复杂度为O(log n)。

17921

数据结构和算法(五)

赫夫曼树 基本介绍 给定n权值作为n叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 或霍夫曼树。...生成赫夫曼树对应的赫夫曼编码 使用赫夫曼编码来生成赫夫曼编码数据 (已压缩) 转成赫夫曼编码对应的字符串 “101010…” =>对照赫夫曼编码重新转成原来的字符串 代码实现(解压功能有bug :数组下标越界和空指针异常...,便于调用 /** * @param bytes 原始的字符串对应的字节数组 * @return 是经过 赫夫曼编码处理后的字节数组(压缩后的数组) */...byte[]数组,通过生成的赫夫曼编码表,返回一赫夫曼码压缩后的byte[] /** * @param bytes 原始的字符串对应的byte[] * @param...从第1特点我们可以看出,B*树分配新结点的概率比B+树要低,空间使用率更高

66020

哈夫曼树、哈夫曼编码和字典树

在哈夫曼编码中,带权路径长度是一重要的概念,因为哈夫曼编码的目的就是要最小化树的带权路径长度达到最优编码的效果。...该方法的核心思想是,将出现频率较高的字符用较短的编码表示,出现频率较低的字符用较长的编码表示,达到压缩数据的目的。 哈夫曼编码的实现过程可以分为两阶段: (1)建立哈夫曼树。...使用哈夫曼编码进行压缩可以达到很高的压缩率,特别是对于包含大量重复字符的文本文件,哈夫曼编码的效果更加明显。 (2)无损压缩。哈夫曼编码是一种无损压缩方法,压缩后的数据可以完全恢复为原始数据。...例如我们给定原文 A B A C C D A,使其变成二进制存储,我们可以使用等长的编码方式,A:00 B:01 C:10 D:11,那么我们的原文就可以转换成00010010101100,len=14...字典树的优点是可以快速的插入、查找删除字符串集合中的单词,时间复杂度为 O(m),其中 m 为单词的长度

30910

数据结构图文解析之:哈夫曼树与哈夫曼编码详解及C++模板实现

在计算机数据处理中,霍夫曼编码使用变长编码表对源符号进行编码,出现频率较高的源符号采用较短的编码,出现频率较低的符号采用较长的编码,使编码之后的字符串字符串的平均长度 、期望值降低,达到无损压缩数据的目的...举个例子,现在我们有一字符串: this is an example of a huffman tree 这串字符串有36字符,如果按普通方式存储这串字符串,每个字符占据1字节,则共需要36...单单这串字符串,就压缩了288-135 = 153bit。 那么,我们如何获取每个字符串编码呢?这就需要哈夫曼树了。...再看哈夫曼编码 为{10,20,30,40}这四权值构建了哈夫曼编码后,我们可以由如下规则获得它们的哈夫曼编码: 从根节点到每一叶子节点的路径上,左分支记为0,右分支记为1,将这些0与1连起来即为叶子节点的哈夫曼编码...这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。 5.

95330

LeetCode 第 199 场周赛(7575231,前14.5%)

压缩字符串 II hard 题目链接 行程长度编码 是一种常用的字符串压缩方法,它将连续的相同字符(重复 2 次或更多次)替换为字符和表示字符计数的数字(行程长度)。...注意,本问题中,压缩时没有在单个字符后附加计数 ‘1’ 。 给你一字符串 s 和一整数 k 。你需要从字符串 s 中删除最多 k 个字符,以使 s 的行程长度编码长度最小。...请你返回删除最多 k 个字符后,s 行程长度编码最小长度 。...示例 1: 输入:s = "aaabcccd", k = 2 输出:4 解释:在不删除任何内容的情况下,压缩后的字符串是 "a3bc3d" ,长度为 6 。...最优的方案是删除 'b' 和 'd',这样一来,压缩后的字符串为 "a3c3" ,长度是 4 。

31710

Redis源码阅读(二)底层数据结构

ptr字段 embstr 编码:保存长度小于44字节的字符串;只分配一次内存,robj与sds连续存储,以此提升内存分配效率与数据访问效率 raw 编码:保存长度大于44字节的字符串 Redis 内部会根据用户给的不同键值而使用不同的编码格式...之所以用柔性数组存放字符串,是因为柔性数组的地址和结构体是连续的,这样查找内存更快(因为不需要额外通过指针找到字符串的位置);可以很方便地通过柔性数组的首地址偏移得到结构体首地址,进而能很方便地获取其余变量...对于删除单一元素,我们可以使用quicklist对外的接口quicklistDelEntry实现,也可以通过quicklistPop将头部或者尾部元素弹出。...rax 是基数树的一种实现,rax中不仅可以存储字符串,同时还可以为这个字符串设置一值,也就是key-value。 如果一中间节点有多个子节点,那么路由键就只是一字符。...如果只有一子节点,那么路由键就是一字符串。后者就是所谓的「压缩」形式,多个字符压在一起的字符串。 image.png A.

82220

服务器开发设计之算法宝典

游程编码 又称行程长度编码或变动长度编码法,是一种与资料性质无关的无损数据压缩技术,基于“使用变动长度的码来取代连续重复出现的原始资料”来实现压缩。...块排序压缩 当一字符串用该算法转换时,算法只改变这个字符串字符的顺序而并不改变其字符。如果原字符串有几个出现多次的子串,那么转换过的字符串上就会有一些连续重复的字符,这对压缩是很有用的。...块排序变换(Burrows-Wheeler Transform)算法能使得基于处理字符串连续重复字符的技术(如 MTF 变换和游程编码)的编码更容易被压缩。...这个匹配信息使用称为长度-距离对的一对数据进行编码,它等同于“每个给定长度字符都等于后面特定距离字符位置上的未压缩数据流。”编码器和解码器都必须保存一定数量的缓存数据。...Base64 使用 64 可见字符来表示二进制字符串, 3 个字符使用 4 可见字符来表示,编码后数据大小变成原来的 4/3。

1.5K44

我从来不理解 “压缩算法”,直到有人这样向我解释它

因为有损压缩可以获得更高的性价比,我们完全可以接受丢失的部分数据,这些丢失的数据并不会对我们使用产生什么影响 ? ?...,从而简化代码里字符的排列组合,于是就出现了各种各样的压缩算法 比如:游程编码,字典算法,哈夫曼编码。。。...=> 6b3y5t1e3d3a2n7c4e 可以用重复的次数加上字符本身来进行压缩,这段本身要占34位字符的数据就被压缩成了只有18字符位的数据,减少了16字符的位置 这种最简单的压缩方式就是游程编码...(Run Length Encoding,RLE)但是这个算法有很大的缺点,如果没有成堆出现的重复字符,在经过游程编码压缩后,最坏的情况,压缩后的文件甚至是压缩前大小的两倍 字典算法将文件中出现频率比较高的单词拿出来...可以绰号:00,下次提到他的名字的时候用00就完事了,压缩后的长度少了很多 当然这不是目前人类能想到的最优解 哈夫曼编码(Huffman Coding)1952年,还在读博士的哈夫曼,在完成《信息论

4.6K20

敲黑板!鹅厂程序员面试也考了这些算法知识

5.3.2 游程编码又称行程长度编码或变动长度编码法,是一种与资料性质无关的无损数据压缩技术,基于“使用变动长度的码来取代连续重复出现的原始资料”来实现压缩。...5.3.4 块排序压缩当一字符串用该算法转换时,算法只改变这个字符串字符的顺序而并不改变其字符。如果原字符串有几个出现多次的子串,那么转换过的字符串上就会有一些连续重复的字符,这对压缩是很有用的。...块排序变换(Burrows-Wheeler Transform)算法能使得基于处理字符串连续重复字符的技术(如MTF变换和游程编码)的编码更容易被压缩。...Base16 也称 hex,它使用16可见字符来表示二进制字符串,1字符使用2可见字符来表示,因此编码后数据大小将翻倍。...Base64 使用64可见字符来表示二进制字符串, 3字符使用4可见字符来表示,编码后数据大小变成原来的4/3。

74673

剑指offer【40~49】

使用队列,同时使用一维数组记录每个字符出现的次数。...如果在插入后某个字符出现次数超过 1 次,就从队列头部删除该数,这样可以保证队列头部始终是第一出现 1 次的字符。 时间复杂度:插入为 O(n),查找为 O(1);空间复杂度为:O(n)。...我们百位为例子,在 12x45 中,百位为 x ,那么百位前的数字为 12,百位后的数字为 45。...最长不含重复字符的子字符串 方法1:使用队列,记录不重复的连续子串。碰到一字符在队列中出现过,更新最大长度,并从队列头部进行删除操作,直到碰到该字符(实际上可以理解为滑动窗口)。...使用变量 left 记录窗口左界,每次碰到窗口内的字符,更新最大长度,同时更新 left 为当前字符位置 +1,即滑动窗口左界到下一位置。时间复杂度为 O(n),空间复杂度为 O(n)。

44230
领券