Haffman Encoding and Decoding

工业互联网工控安全与工业质检AI大模型建设方案.pptx 立即下载

Read this blog and it seems this is a quite decent interview question. Haffman encoding

Haffman encoding is  a classic way to encode characters. It encodes characters according to building an optimistic binary tree. The binary tree is built according to the frequency. The high frequency characters need to be encoded using short strings. Low frequency characters instead can be encoded to be longer strings.

Suppose we have a string "aaaaaabbbbccddd", [a] = 6, [b] = 4, [c] = 2, [d] = 3. Every time, take the lowest two nodes to built a tree and make the frequency the sum of the two nodes.  the the new node will added into the pool again.

Tree Construction:

1: The current nodes: 6, 4, 2, 3, the smaller two are: 2 and 3, the new root now is 5.

2: The current nodes: 6, 5, 4, the smaller two are 4, 5, the new root is 9.

3: The current nodes: 6, 9, the smaller two are 6, 9, the new root is 15

4: the current nodes : 15, there is only one node left. The tree is complete.

    15

    /      \

        A:6     9

          /     \

  B:4      5

    /     \

      C:2   D:3

To get the haffman encoding, every character's encoding equals to traverse the tree to leave nodes.

To decode the haffman sequence. everytime meets the 0, goes to left, meets the 1, goes to right. After decode one char, goes to the root again.

#include "header.h"
using namespace std;

// suppose we have an array aaaaaabbbbccddd
// first step is to calculate frequencey information and build haffman tree.
struct TreeNode {
  char ch;
  double freq;
  TreeNode* lchild, *rchild;
  TreeNode(char c = 0, double f = 0, TreeNode* l = NULL, TreeNode* r = NULL) : ch(c), freq(f), lchild(l), rchild(r) {}
};

struct cmp{
  bool operator() (TreeNode*& a, TreeNode*& b) {
    return a->freq > b->freq;
  }
};

TreeNode* createTree(string str) {
  unordered_map<char, int> charSet;
  for(int i = 0; i < str.size(); ++i) {
    charSet[str[i]]++;
  }
  priority_queue<TreeNode*, vector<TreeNode*>, cmp> que;
  for(unordered_map<char, int>::iterator p = charSet.begin(); p  != charSet.end(); ++p) {
    que.push(new TreeNode(p->first, (double) p->second / str.size()));
  }
  while(que.size() > 1) {
    TreeNode* l = que.top(); que.pop();
    TreeNode* r = que.top(); que.pop();
    TreeNode* newNode = new TreeNode(0, l->freq + r->freq, l, r);
    que.push(newNode);
  }
  return que.top();
}

// in this function, we can get each character's encode string.
void encodeString(TreeNode* root, string code) {
  if(!root->lchild && !root->rchild) {
    cout << root->ch << ": " << code << endl;
    return;
  }
  if(root->lchild) encodeString(root->lchild, code + '0');
  if(root->rchild) encodeString(root->rchild, code + '1');
}

string decodeString(TreeNode* root, string str) {
  string ret = "";
  TreeNode* p = root;
  for(int i = 0; i < str.size(); ++i) {
    p = ((str[i] == '0') ? p->lchild : p->rchild);
    if(p->lchild == NULL && p->rchild == NULL) {
      ret += p->ch;
      p = root;
    }
  }
  return ret;
}


int main(void) {
  TreeNode* root = createTree("aaaaaabbbbccddd");
  string code = "";
  encodeString(root, code);
  string str = decodeString(root, "010110111");
  cout << str << endl;
}

2024 《计算机网络》实验教学指导书.doc 立即下载

相关推荐

5分钟搞定:用Ollama在MacBook上本地运行Qwen3大模型(附避坑指南)

本文详细介绍了如何在MacBook上使用Ollama快速部署和运行Qwen3大模型,包括安装步骤、性能优化技巧及常见问题解决方案。Ollama作为一款轻量级工具,特别适合M系列芯片的Mac用户,支持多种量化版本,显著降低资源消耗,提升推理速度。

sql99的博客 820

Encoding & Decoding

encoding和decoding

二狗学网安 1772

在 Ubuntu 上安装和配置 PostgreSQL 实录

本文介绍了在Ubuntu系统上安装和配置PostgreSQL数据库的完整步骤。主要内容包括:1)通过官方源或PPA源安装最新版本;2)修改配置文件(postgresql.conf和pg_hba.conf)以允许远程访问;3)设置postgres用户密码;4)创建新用户并配置权限;5)防火墙设置和重启服务;6)验证安装和远程连接方法。文章提供了详细的命令行操作指导,帮助用户完成从安装到远程访问的全部配置过程。

qq_58168857的博客 1203

【Python笔记】Python 中的编码与解码

本文记录 Python2.x 和 Python3.x 中关于编码和解码的问题.

RadiantJeral的博客 2168

LVGL 拨盘菜单(Dial Menu)

h。

摸鱼专家 191

毕设帮扶:从0到1搭建基于YOLOv5的打架斗殴检测系统——助你搞定深度学习毕设

做完这个毕设,你已经掌握了从数据准备到模型部署、界面开发的全流程。把模型部署到边缘设备(如安防摄像头的嵌入式系统)上,实现本地化实时检测与报警;加入行为严重程度分析(如轻微推搡 vs 严重斗殴)、涉事人员数量统计,让系统从“检测”升级为“智能安防决策”;尝试融合声音、红外等多模态数据,打造全方位的暴力事件监测系统。按照这个教程一步步做,你的毕设肯定能做得很扎实。要是过程中遇到啥问题,别担心,慢慢梳理或者咱们一起聊聊,一定能把这个毕设做成你满意的作品。

LXY_LOVE36的博客 118

encoding & decoding

编码是按照规则把字符转换成对应的二进制,并写入存储。而解码是读取存储,把二进制转成成字符。编码最终是为了存储,而解码最终是为了用户可以看懂。打印字符(96) + 控制字符(32) = 128 个,通过一个Byte就可以完成编码。最高位为0,其它7位代表2^7=128个字符,所以标准ASCII字符集是不能存储汉字。 例如:0100 0001 表示 2 ^6 + 2 ^0 = 65.在标准ASCII字符集的基础上,利用最高位后,编码的范围变为(1000 0000 ~ 1111 1111)即:128255。标

MyFreeIT 593

语音算法面试复习系列3——语音识别基础 + CTC 详解

摘要:本文系统讲解了语音识别(ASR)的核心算法CTC。主要内容包括:1) ASR的核心挑战是输入音频帧与输出文字序列的对齐问题;2) CTC通过引入blank标记和动态规划算法,无需对齐标注即可训练;3) 详细解析CTC前向算法实现路径概率求和,以及贪心和Beam Search解码方法;4) 指出CTC的条件独立性假设导致无法建模输出依赖关系;5) 对比CTC与传统方法和Attention/Transducer的优缺点,分析实际应用中的subsampling技术。文章包含数学推导、代码实现和面试常见问题,

m0_60605453的博客 305

Python编码格式理解:encoding与decoding

在Python对txt文档处理的时候,txt文档默认为gb2312编码,在打开文件的时候,将其转换为Utf-8编码,才能进一步处理。 fi=open("c:/","r",encoding="utf-8") 常用的几种编码关系如下: 因为打开的文件已经转换为utf-8,所以写入的时候,也是用utf-8来编码字符串,在脚本开头就不需要写 # -*- coding:utf-8 -*- 来说明...

gusui7202的博客 1万+

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

AI人人懂 557

国科大学习资料--自然语言处理(宗成庆)-2019期末考试题

国科大学习资料–自然语言处理(宗成庆)-2019期末考试题 国科大学习资料–自然语言处理(宗成庆)-2019期末考试题 国科大学习资料–自然语言处理(宗成庆)-2019期末考试题

无名何许人的博客 2434

【串讲总结】序列模型结构之普通堆叠、Encoding-Decoding、Encoding-Forcasting

前言一般来说对于一些时空序列模型,都是普遍的三种结构。当然结构可能有很多,我这里结合我之前写过的文章,总结下主要的三种。普通的RNN堆叠,即stackingED结构即Encoding-D...

AI蜗牛车 5711

【ComfyUI】QwenImageEdit OOTD角色与姿态匹配换装

本文介绍了一个基于Qwen Edit OOTD 2.0的ComfyUI工作流,能够实现角色与姿态匹配的智能穿搭生成。该工作流通过整合模型推理、姿态识别、图像拼接和渲染等节点,完成从角色图、姿态图到成品穿搭图的完整生成流程。核心采用Qwen Image系列模型进行图像理解和编辑,配合ControlNet进行姿态引导。用户只需提供角色图和姿态参考图,系统即可自动完成姿态解析、语义编码、采样生成等步骤,输出与输入姿态一致的穿搭图像。该方案适用于虚拟角色展示、电商试穿等场景,能保持角色特征一致的同时灵活变换姿态,显

Mr数据杨 1582

字符串编码(charset,encoding/decoding)问题原理

字符串编码(charset, encoding/decoding)问题原理 编码问题很重要,关于编码问题的文章也很多。我本来没有兴趣重复这个主题。 一个朋友问我有没有比较好的编码介绍文章。我记得以前看过几篇很不错的,但是当时搜索到的时候,就比较费劲,一时想不起来。于是,我就说,我攒一篇好了。 --------------------------------------- 编码无...

buaawhl的专栏 766

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

encoding与decode的含义

暂时还不太清楚

miaokezhang的博客 5759

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Huffman Encode 霍夫曼编码 c++实现

Huffman Encode(哈夫曼编码) c++实现欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的

weixin_45944216的博客 952

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Telegram Encoding and Decoding

// Telegram Encoding #include void main() { char c; while((c = getchar()) != '\n') { if((c >= 'a' && c = 'A' && c <= 'Z')) { c = c + 4; if ((c > 'z') || (c < 'z' && c <= 'Z'-4)) c =

kerin_lu的专栏 1130

Python实现huffman编码

Huffman树建立,右大左小 如arr = [(‘a’,15),(‘b’,8),(‘c’,6),(‘e’,5),(‘e’,3),(‘f’,1)] Step1:根据values排序,生成:[(‘a’,15),(‘b’,8),(‘c’,6),(‘e’,5),(‘e’,3),(‘f’,1)]。 Step2: e,f值最小,从arr中取出,作左右孩子节点,e+f =4作为父节点(p1)。更新arr,重新排序;arr =[(‘a’,15),(‘b’,8),(‘c’,6),(‘e’,5),(‘p1’,4)] Ste

wo_renshen的博客 818

解析ffmpeg-2.8自带例子decoding_encoding.c了解如何解析音视频流程

FFmpeg自带的例子注释和个人见解,有什么问题请大家指正。 /* libavcodec API use example. * * @example decoding_encoding.c * Note that libavcodec only handles codecs (mpeg, mpeg4, etc...), * not file formats (avi, vob, mp4

金石之言 2105

Python之encoding

encoding Unicode utf-8 utf-16 utf-32 gbk ASCII 码 decoding 例子 encoding 根据Python官方文档中有关字符串的部分1: str.encode(encoding=”utf-8”, errors=”strict”) Return an encoded version of the string ...

LW free space 6万+

encoding / decoding

<br />1.  Players and how they support encoding / decoding<br />http://www.matroska.org/technical/guides/playback/windows/index.html

eastage的专栏 706

Swift基础之Encoding 和 Decoding

Swift 4给我们带来了 Codable 协议,让对象转 JSON Data 变得如此的简单有许多不同的场景,您希望将您的 Class 换为数据。 一个非常常见的需求是 HTTP POST 请求的时候 JSON 数据作为 HTTP Body。 最常见的方法之一如下所示:JSONSerialization class 负责返回 Data 对象,从而作为 HTTP 的请求体。JSONEncoder

hbblzjy的博客 1539

circe Encoding和Decoding

Encoder[A]是将A类型转化成JSON的函数,Decoder[A]是将Json转化成一个A对象或者是exception的函数。   circe提供了scala标准库中类型的的implicit函数,可以方便的对String,Int等基本类型进行处理,同时也提供了List[A]、Option[A]和其他泛型类型的处理,只要是A有对应的Encoder。   可以使用 .asJson 将...

十万小时之旅 760

Decoding_Encoding例程(ffmpeg编解码)

*有人会好奇说例程你放出来有什么用,我要说的是,如果例程你直接能跑通,那么浏览器右上角有个×,点一下就好了 **这也是我感觉不爽的地方,例程居然一堆错误…… 要是环境配置有错误也就罢了,毕竟那是自己的事情;要是版本升级导致的错误也就罢了,最多就是疏于维护;但是出现abc级的错误就很难让我理解了…… *这篇只是把我调好的代码发上来,对报错的地方有些注释,如果有人看到了,手痒打算跑跑例程,可...

追本溯源 900

用Python实现URL Encoding和Decoding

前些日子在一个论坛上看到网友拿03版《天龙八部》和13版《天龙八部》作对比。在比较两个版本的片尾曲的时候,提到了03版的片尾曲《宽恕》。帖子中提到,这首歌由王菲演唱、林夕作词、赵季平(电视剧《关西无极刀》片头曲的作者)作曲。 记得高中时看《天龙》的时候就挺喜欢这首歌的,于是就用火狐浏览器下载了这首歌。但是下载得到的文件名是:%E5%AE%BD%E6%81%95.mp3。用浏览器在网上下载包含

1万+

[转] 浅谈视频基础知识、视频编码、压制

写在前面 本文面向的读者是 想提高自己上传视频质量的up主、视频搬运工、收藏爱好者、以及单纯想提高一下对于“视频”这一领域的姿势水平的同学们。 我在b站虽然只当了半年多up主,但其实很久以前就开始做视频了(虽然剪辑技术仍然渣渣),所以对于视频的基本性质和视频的编码压制都有一些知识基础。最近突然看到b站宣发中心出了一篇题为“如何避免二压!小丸篇”的教程,我出于兴趣就点进去看了看。看完了发现:这。。。...

ACM之路 7587
上一篇: Find Closet Pairs -- To be continue
下一篇: Shuffle related problem.
ActiveCoder
博客等级 码龄11年 4粉丝 345原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值