mtf算法(关于该算法:https://www2.cs.duke.edu/csed/algoprobs/beta/bw1.html):

#include <stdio.h>
#include <string.h>
#include <stdlib.h> void mtf_encode(const char *s, unsigned len, int *code)
{
int pos = 0, num, trace = 0;
unsigned i, j, k;
int is_hav[26], stack[26]; memset(is_hav, 0, 26); while (*s)
{
if (!is_hav[*s - 'a'])
{
stack[pos] = *s - 'a' + 1;
is_hav[*s - 'a'] = 1;
++pos;
code[trace++] = pos;
}
else
{
j = 0;
while (stack[j] != *s - 'a' + 1) j++;
code[trace++] = j + 1, num = stack[j];
while (j > 0) stack[j] = stack[j - 1], j--;
stack[j] = num;
}
s++;
}
} void print_mtf_encode(int*code, int len)
{
unsigned i;
printf("[");
for (i = 0; i < len; i++)
{
printf("%d", code[i]);
if (i != len - 1)
printf(", ");
}
printf("]\n");
} int main()
{
char s[] = "abcabcaaaaaaaab";
int len = strlen(s);
int *code = (int *)malloc(sizeof(int) * len);
mtf_encode(s, len, code);
print_mtf_encode(code, len);
free(code);
return 0;
}

  上面算法不是错的,根据题意和不同的思考角度可以编写不同的mtf算法,按字典序排序后的mtf算法(只统计出现的字符):

void mtf_encode(const char *s, unsigned len, int *code)
{
int num, trace = 0;
unsigned i, pos = 0;
int is_hav[26], stack[26]; memset(is_hav, 0, 26); for (i = 0; i < len; i++)
if (!is_hav[s[i] - 'a'])
is_hav[s[i] - 'a'] = s[i] - 'a' + 1; for (i = 0; i < 26; i++)
if (is_hav[i] != 0)
stack[pos++] = is_hav[i]; while (*s)
{
pos = 0;
while (stack[pos] != *s++ - 'a' + 1) pos++;
code[trace++] = pos + 1, num = stack[j];
while (pos > 0) stack[pos] = stack[pos - 1], pos--;
stack[pos] = num;
}
}

  rle算法(了解该算法:https://en.wikipedia.org/wiki/Run-length_encoding):

const char*digits = "0123456789";

void comp_bit(char *rle, int *i, int num)
{
if (num > 9)
comp_bit(rle, i, num / 10);
rle[(*i)++] = digits[num%10];
} void rle_encode(const char *s, char *rle)
{
unsigned i = 0, j = 1;
rle[i++] = *s++;
while (*s)
{
if (rle[i - 1] != *s)
{
comp_bit(rle, &i, j);
rle[i++] = *s, j = 1;
}
else j++;
s++;
}
comp_bit(rle, &i, j);
}

  

  

Move-to-front(MTF) and Run-lenght encoding(RLE) algorithms的更多相关文章

  1. poj-1782 Run Length Encoding

    http://poj.org/problem?id=1782 Run Length Encoding Time Limit: 1000MS   Memory Limit: 30000K Total S ...

  2. Gym 100342F Move to Front (树状数组动态维护和查询)

    用树状数组动态和查询修改排名. 树状数组可以很方便地查询前缀和,那么可以利用这一特点,记录一个点在树状数组里最后一次出现的位置, 查询出这个位置,就可以知道这个点的排名了.更改这个点的排名的时候只要把 ...

  3. SDUT 2352 Run Length Encoding

    点我看题目 题意 :将给定的字符串编码,编码的规则根据两条,1.如果字符串里有连续相等的字符,就变为两个字符,一个是这些连续相同的字符的个数,另一个是这个字符,但是如果数量超过了9个,那就输出9再输出 ...

  4. UVW源码漫谈(番外篇)—— Emitter

    这两天天气凉了,苏州这边连续好几天都是淅淅沥沥的下着小雨,今天天气还稍微好点.前两天早上起来突然就感冒了,当天就用了一卷纸,好在年轻扛得住,第二天就跟没事人似的.在这里提醒大家一下,天气凉了,睡凉席的 ...

  5. hive_学习_01_hive环境搭建(单机)

    一.前言 本文承接上一篇:hbase_学习_01_HBase环境搭建(单机),主要是搭建 hive 的单机环境 二.环境准备 1.说明 hive 的下载来源有: 官方版本:http://archive ...

  6. UVA 1351 十三 String Compression

    String Compression Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit ...

  7. COCO 数据集的使用

    Windows 10 编译 Pycocotools 踩坑记 COCO数据库简介 微软发布的COCO数据库, 除了图片以外还提供物体检测, 分割(segmentation)和对图像的语义文本描述信息. ...

  8. 北大poj- 1009

    Edge Detection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22835   Accepted: 5398 D ...

  9. 自制 COCO api 直接读取类 COCO 的标注数据的压缩文件

    第6章 COCO API 的使用 COCO 数据库是由微软发布的一个大型图像数据集,该数据集专为对象检测.分割.人体关键点检测.语义分割和字幕生成而设计.如果你要了解 COCO 数据库的一些细节,你可 ...

随机推荐

  1. npx工具

    参考文章:阮一峰的网络日志 - npx 使用教程 npx的作用 1.调用项目模块 即node_modules目录下的模块,而不用加上相对路径 $ npx mocha --version 原本应该是这样 ...

  2. http请求常见错误状态码

    一.HTTP 错误 400 400 请求出错 由于语法格式有误,服务器无法理解此请求.不作修改,客户程序就无法重复此请求. 原因:(调用方接口方法的实参和服务器接口方法的形参不一致) 1.前端提交数据 ...

  3. vue-cli脚手架创建vue项目

    CLI 使用vue-cli可以快速搭建Vue开发环境以及对应的webpack配置 cnpm install -g @vue/cli // 如果需要使用旧版本的vue init功能(脚手架2),你可以全 ...

  4. windows10打开switchHost,提示无修改权限

    1.在C盘找到hsot文件,点击属性,去掉只读,去掉勾选. 点击编辑 点击Users,选择完全控制,这回降低电脑安全! 确定.

  5. centos 安装mindoc 二进制安装

    自建 文档管理系统或者说 wiki系统 mindoc官网: https://www.iminho.me/#%E6%BC%94%E7%A4%BA mindoc github页面:https://gith ...

  6. unittest学习4-跳过用例执行

    unittest支持跳过单个测试方法,甚至整个测试用例,还支持将测试用例标记为“测试失败” 基本跳过如下: import unittestimport requests,sys class MyTes ...

  7. Python实现AVL树

    参考: https://www.cnblogs.com/linxiyue/p/3659448.html?utm_source=tuicool&utm_medium=referral class ...

  8. MySQL-THINKPHP 商城系统二 商品模块的展示

    上回已经说到,商品被分为spu商品和sku商品  , ------------------------------------------------------------------------- ...

  9. IntelliJ IDEA 2017.3尚硅谷-----安装

    选择路径 安装目录 bin目录下的文件 启动文件 虚拟机的配置信息 -Xms128m 初始内存 -Xmx750m 最大内存-XX:ReservedCodeCacheSize=240m 可保留代码缓存的 ...

  10. Windows10_64位下upload-labs靶场搭建+phpstudy_v8.1安装教程

     之前介绍了Windows10_64位搭建WampServer的教程,这一次再来水一篇phpstudy的搭建教程.哈哈哈.     顺便安装一下upload-labs,搭着玩玩~         操作 ...