当前位置: 首页 > news >正文

信息论压缩算法--香农码

香农编码(通常指香农-范诺编码)是一种基于符号概率构建前缀码的变长无失真信源编码方法,其基本原理是:将信源符号按概率降序排列,递归二分划分为概率和近似相等的两组,逐层分配二进制码元(0/1),使高频符号对应短码、低频符号对应长码,码长近似取为 li=⌈−log⁡2pi⌉li​=⌈−log2​pi​⌉,确保前缀性与可译性。‌‌

  • 步骤1‌:将信源符号按概率从大到小排序;
  • 步骤2‌:递归将符号集划分为两个概率和尽可能接近的子集,分别赋予码元 0 和 1;
  • 步骤3‌:对每个子集重复划分,直至每个子集仅含一个符号;
  • 步骤4‌:从根到叶的路径即为该符号的二进制码字(自上而下构建码树)。‌‌

需注意:‌香农编码 ≠ 香农第一定理(信源编码定理)‌;前者是具体编码方法(非最优,效率常低于哈夫曼编码),后者是证明“平均码长 ≥ 熵,且可达逼近”的存在性定理。香农编码虽理论意义重要,但因划分方式不唯一、常未能充分利用短码,实际已较少单独使用。‌‌

%定义信源 px=[0.2,0.19,0.18,0.17,0.15,0.10,0.01]; hx=0; %码长 l=[]; decode=[]; g=0; G=[]; ca=[]; HX=0; strArray={'0.'}; for i=1:length(px)-1 strArray=[strArray,{'0.'}]; end % 对码源进行递减排列 px=sort(px,'descend'); %码长 decode=ceil(-log2(px)); G=[0,cumsum(px)]; G=G(1:end-1); %码字求取 temp=G; for i=1:length(px) for j=1:decode(i) strArray{i}=strcat(strArray{i},int2str(floor(temp(i)*2))); temp(i)=temp(i)*2-floor(temp(i)*2); end end for i=1:length(px) temp1=strArray{i}; ca=[ca,{temp1(3:3+decode(i)-1)}]; end %UI建设 fprintf('=============编码结果===========\n'); fprintf('概率\t\t累加概率\t\t码长\t\t码字\n'); for i=1:length(px) fprintf('%.2f\t%.2f\t\t%d\t\t%s\n',px(i),G(i),decode(i),ca{i}); end %把元胞数组转换成字符串数组 substr_lengths = cellfun(@length, ca); avg_length = mean(substr_lengths); fprintf('平均子串长度: %.2f\n', avg_length); fprintf('平均熵:%g\n', sum(px.*(-log2(px))));
http://www.jsqmd.com/news/867839/

相关文章:

  • 边缘AI加速:CGRA架构与近似计算技术解析
  • 医院门生产厂家10大品牌排名表最新图片
  • Agent Framework:理解关键区别
  • 智能体Prompt工程核心技巧:让 AI Agent Harness Engineering 精准理解复杂指令
  • 2026年,写给所有还在迷茫的技术人:你的坚持终将闪耀
  • 2026年企业AI智能体培训:高性价比服务商推荐指南
  • 第十一章:如何设计人机协作流程?——让AI做事,但控制在手里
  • AI Agent开发工具大爆发:Claude、OpenAI、Google三强争霸
  • 3步快速定位Windows热键冲突:Hotkey Detective终极指南
  • 【大白话说Java面试题 第69题】【JVM篇】第29题:GC Roots 有哪些?
  • Java类高级特性详解(泛型、类加载、反射、枚举、注解)
  • AI 生成 SQL 差点扫全表:业务接 AI 前,必须先做执行前审计
  • AI 应用开发到底在开发什么?
  • AI写代码比我快10倍,我该怎么办?一个老程序员的深度思考
  • MelonLoader完整教程:5分钟掌握Unity游戏模组加载终极方案
  • AI Agent Harness Engineering 的成本控制:Token 优化与推理加速
  • HAMi 正式接入 Kubernetes DRA:下一代 GPU 资源模型实践指南
  • 免费图片去水印工具有哪些?2026 在线去水印软件实测盘点
  • 【ChatGPT一键生成专业PPT终极指南】:20年IT架构师亲测的7大高转化率提示词模板与避坑清单
  • 天禧AI 4.0发布,实现从“+AI”到“AI+”关键跃升,联想股价暴涨!
  • 【STM32】遥控伸缩门禁改NFC刷卡
  • CANN ONNX 模型生态兼容实战:从模型导入、算子映射到常见报错排查的全流程指南
  • J-Link GD32F303CC 连接与速度测试报告
  • 实测taotoken在不同时段api调用的响应延迟与稳定性表现
  • python校园篮球场地管理系统
  • 【c++面向对象编程】第43篇:可变参数模板(C++11):优雅处理不定长参数
  • 工业云脑:序章:数据飞向云端,工厂拥有了“新大脑”
  • Joy-Con Toolkit:解锁任天堂手柄终极自定义的3大核心技术方案
  • 【从0到1:一个篮球迷的“全栈执念”】后端+小程序全开源,跑起来就是完整社区
  • 在AWS中国区实现EKS跨VPC跨区域实现节点加入集群的实践