用户:
Asheep233查看:449 回复:17 评论:12 创建时间:2022-04-19T09:43:39
𝙲ℴ𝗌𝔦𝒹ₑ𝑟克星:ABCABCABCABC..............................
输出结果:A1B1C1A1B1C..........................
)
点赞0
评论
FML饭米粒这种算法不适用于没有或很少重复单个数据的情况,比如1234567890,这种情况下压缩后大小会翻倍11213141516171819101
点赞0
评论
本来就是……哈夫曼树虽好,但是压缩不好写啊——
Technetium其实在你猫这个情境下,如果出现了这种压缩算法可用的数据(即长串的相同数据)那应该优先考虑数据结构本身是不是要改而不是去压缩()
点赞2
评论
这个是我做游戏的衍生成果,用来存储地图啥的( 因为网格地图会有很多连续的空位
戳啦,储存地图代码要用嘛
Technetium其实还可以稍微检索一下个数,在数据全不为数字的情况下跳过长度为1的项,可以保证这个算法相对稳定,即压缩后的长度不超过原本的长度
例:qqqqqwwwwertyui→q5w4ertyui
点赞1
评论
Tsxet1、限制性
必须要连续并且相同的数据,这种情况要想很普遍的话估计是要改单独译码或者转进制
而且你这是单字符诶,压缩能力和ZIP差了千倍(虽然你们用的基础算法都一样)
ZIP就像定义了一个函数,后面运用的话,直接套函数就可以了
2、能力性
限制要求几乎砍掉了超多数据,那压缩还有没有用呢?如果按照你的方法一个字符串都要配一个数字的话,程序反而会更加长。
ZIP也只对3字符串以上的重复数据进行压缩处理。
3、读取性
你这是怎么读取的呢?比如:1112到底是什么意思呢?
是 1 112 表示 112个1
还是1 1 1 2 表示1个1 和 2个1
呢?即使有断点,断点是否也需要占用呢?
断点和ZIP的标记位也差不多,可是你的断点和Literal能比吗?
当然我分析的也不一定正确,如果有错误希望指正。
点赞1
评论
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[]) {
string n;
cin>>n;
int cnt = 1;
for(int i = 0;i<n.size();i++){
if(n[i] == n[i+1]){
cnt++;
}
else{
if(cnt>1){
cout<<n[i]<<cnt;
}
else{
cout<<n[i];
}
cnt =1;
}
}
}点赞0
评论
这个方法只限于在充满相同字符的时候用
且基本上云变量的字符数还是够用的
一般分隔符的方法就足够了
点赞0
评论
不,平均情况下rle是反向压缩的,元素越压越多。储存低质量图像的时候可能会优一点
阿巴阿巴……
我是之前做沙盒地图的时候顺带做的,因为有很多空位要存
是的