当前位置: 首页 > 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.gsyq.cn/news/1351305.html

相关文章:

  • 边缘AI加速:CGRA架构与近似计算技术解析
  • 智能体Prompt工程核心技巧:让 AI Agent Harness Engineering 精准理解复杂指令
  • Python数据可视化实战:从Matplotlib到Plotly的完整指南
  • AI 生成 SQL 差点扫全表:业务接 AI 前,必须先做执行前审计
  • AI Agent 架构设计与实现原理深度解析
  • 免费图片去水印工具有哪些?2026 在线去水印软件实测盘点
  • 【ChatGPT一键生成专业PPT终极指南】:20年IT架构师亲测的7大高转化率提示词模板与避坑清单
  • 【STM32】遥控伸缩门禁改NFC刷卡
  • J-Link GD32F303CC 连接与速度测试报告
  • 【c++面向对象编程】第43篇:可变参数模板(C++11):优雅处理不定长参数
  • MelonLoader完整教程:5分钟掌握Unity游戏模组加载终极方案
  • 【从0到1:一个篮球迷的“全栈执念”】后端+小程序全开源,跑起来就是完整社区
  • Agent Framework:理解关键区别
  • 实测百度网盘提速:从pandownload老玩家的视角,聊聊百度网盘不限速下载与解析的那些事
  • 【大白话说Java面试题 第68题】【JVM篇】第28题:对于 JDK 自带的监控和性能分析工具用过哪些?一般你怎么用的?
  • AI Agent替代房产顾问?实测对比报告:12城27个项目的人效、客诉率与成交周期数据全公开
  • python游泳用品专卖店系统
  • 电商平台SQL数据层设计实战指南
  • 国产多模态大模型 vs Stable Diffusion:开发者该如何选?
  • 鸿蒙云端相册页面构建:最近照片网格与备份队列模块详解
  • 2026年5月办公空间设计趋势与优质服务商洞察 - 2026年企业推荐榜
  • 深入骨髓的性能剖析:IntelliGit 启动与 Diff 优化的前世今生
  • JDK1.7 升级到 JDK1.8 后 HashMap 数据结构变化有哪些影响
  • AI辅助编程:发展现状、效率评估与未来展望
  • 因果本是叙事
  • Linux awk 数据分析、字段截取实战
  • 【央行金融科技白皮书深度解码】:AI Agent在跨境支付、信贷审批、监管报送三大场景的9项强制性技术基线
  • Linux grep 文本过滤与正则实战——日志筛选、文本匹配神器
  • NotebookLM移动端响应延迟高达2.7秒?揭秘GPU加速未启用背后的架构真相,3步强制优化
  • 别再死磕传统SEO!2026年AI搜索流量爆发,头部GEO公司推荐与转型指南 - 商业科技观察