huffman基础代码实现
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+7;
const int INF=0x3f3f3f3f;
struct Huffman_Node{
int ans;
int father;
int left;
int right;
}H_Node[maxn];
int n;
void init()///初始化
{
for (int i=0;i<(n+n-1);++i)
{
H_Node[i].father = -1;
H_Node[i].left = -1;
H_Node[i].right = -1;
}
}
int H[maxn];
int main()
{
scanf("%d",&n);
init();
memset(H,-1,sizeof(H));
for(int i=0;i<n;++i)
{
scanf("%d",&H_Node[i].ans);
}
for (int j=1;j<n;++j)///n个叶子节点,最多合并n-1次
{
int m1 = INF;///最小的数
int m2 = INF;///第二小的数
int idx_1 = -1;
int idx_2 = -1;
for (int t=0;t<n+j-1;++t)
{
///cout<<"fa"<<' '<<H_Node[t].father<<endl;
if (H_Node[t].father==-1)
{
if (H_Node[t].ans < m1)
{
idx_2 = idx_1;
idx_1 = t;
m2 = m1;
m1 = H_Node[t].ans;
}
else if (H_Node[t].ans < m2)
{
m2 = H_Node[t].ans;
idx_2 = t;
}
}
}
/// cout<<idx_1<<' '<<idx_2<<endl;
H_Node[n+j-1].ans = H_Node[idx_1].ans + H_Node[idx_2].ans;///合并概率
///cout<<H_Node[n+j-1].ans<<endl;
H_Node[idx_2].father = n+j-1;
H_Node[idx_1].father = n+j-1;
H_Node[n+j-1].left = idx_1;
H_Node[n+j-1].right = idx_2;
}
for (int i=0;i<n;++i)
{
int F=H_Node[i].father;
///cout<<F<<endl;
int C=i;
int cnt = n;
while (F != -1)
{
if (H_Node[F].left==C)
{
H[--cnt]=0;
///cout<<0;
}
else
{
H[--cnt]=1;
///cout<<1;
}
C = F;
F = H_Node[F].father;
}
for (int j=cnt;j<n;++j)
{
printf("%d",H[j]);
}
puts("");
}
return 0;
}
huffman基础代码实现的更多相关文章
- Mysql基础代码(不断完善中)
Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...
- 如何保障Go语言基础代码质量?
为什么要谈这个topic? 实践中,质量保障体系的建设,主要针对两个目标: 一是不断提高目标业务测试覆盖率,保障面向客户的产品质量:二就是尽可能的提高人效,增强迭代效率.而构建全链路质量卡点就是整个体 ...
- C++基础代码--20余种数据结构和算法的实现
C++基础代码--20余种数据结构和算法的实现 过年了,闲来无事,翻阅起以前写的代码,无意间找到了大学时写的一套C++工具集,主要是关于数据结构和算法.以及语言层面的工具类.过去好几年了,现在几乎已经 ...
- [译]Vulkan教程(04)基础代码
[译]Vulkan教程(04)基础代码 General structure 通用结构 In the previous chapter you've created a Vulkan project w ...
- 001-脚手架发展,基础代码结构+mybatis代码生成
一.概述 脚手架是为了保证各施工过程顺利进行而搭设的工作平台. 编程领域中的“脚手架(Scaffolding)”指的是能够快速搭建项目“骨架”的一类工具. java变成中,架构师搭建的代码结构你到处拷 ...
- java:Spring框架1(基本配置,简单基础代码模拟实现,spring注入(DI))
1.基本配置: 步骤一:新建项目并添加spring依赖的jar文件和commons-logging.xx.jar: 步骤二:编写实体类,DAO及其实现类,Service及其实现类; 步骤三:在src下 ...
- java:struts2.3框架1(struts2快速配置,各文件之间的关系,基础代码简化版,XML中的通配符)
1.struts2快速配置: A.到http://struts.apache.org下载struts2开发包struts-2.3.32-all.zip B.新建web项目并添加struts2依赖的ja ...
- Python基础代码1
Python基础代码 import keyword#Python中关键字 print(keyword.kwlist) ['False', 'None', 'True', 'and', 'as', 'a ...
- php 基础代码大全(不断完善中)
下面是基础的PHP的代码,不断完善中~ //语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. /* [命名规则] */ 常量名 类常量建议全大写,单词间用下划线 ...
- [51单片机] HC-SR04超声波测距仪 基础代码
>_<:超声波测距仪模块: >_<:51单片机,11.0592MHz晶振,将采集数据发送到串口的基础例子: >_<:代码: /******************* ...
随机推荐
- 操作系统 -- SLAB如何分配内存
在Linux系统中比页更小的内存对象要怎么分配呢? -- SLAB,学习下SLAB分配器的原理和实现 SLAB 与Cosmos物理页面管理器一样,Linux中的伙伴系统是以页面为最小单位分配到,现实更 ...
- 做一次产品调研,这次我是一名PM
AldeaS 想法超市:开启想法交流与项目协作新体验 在这个创意无限.节奏飞快的时代,你是否渴望一款能够精准捕捉想法,高效推进项目,并助力结识志同道合伙伴的得力工具?Aldeas 想法超市 App 应 ...
- CountDownLatch和FutureTask类使用方法解析
摘要:使用CountDownLatch和FutureTask解决主线程需要拿到多个子线程任务的执行结果之后再进行执行的问题. 综述 我们在工作中,经常遇到有些业务场景需要使用多线程异步执行任务,从 ...
- 使用aqt安装Qt历史版本
首先是安装aqt: Windows 端 pip install -U pip pip install aqtinstall Mac端(可以用pip,也可以用brew) brew install aqt ...
- Django Web应用开发实战第五章
视图类是通过定义和声明类的形式实现的,根据用途划分3部分:数据显示视图.数据操作视图和日期筛选视图. 数据显示视图:将后台数据显示在网页上,数据主要来自模型,有:RedirectView.Templa ...
- 2024牛客多校2B MST
同步发布于我的网站. Problem Sajin最近深入研究了最小生成树,现在他已经掌握了MST的算法.他渴望通过一系列查询来评估您对最小生成树概念的掌握程度. 您将面临一个加权无向图,该图包含没有任 ...
- docker | Ubuntu16.04安装与卸载docker
安装docker sudo apt-get install docker-ce docker-ce-cli containerd.io 卸载docker apt-get purge卸载命令需要逐条执行 ...
- Hypermesh_LsDyna划分网格
1.创建角点 2.创建单元(按F6) 3.划分网格(按F12) 4.清除临时节点(Geom → temp nodes → clear all) 5.设置单元集(PD单元)(*SET_SHELL_LIS ...
- maixpy 常用API整理
2.openmvAPI整理 2.1 cmath - 复数的数学函数 cos cmath.cos(z) 返回z的余弦. exp cmath.exp(z) 返回z的指数. log cmath.log(z) ...
- python基础—集合
一.集合(数字,字符串,元组) 1.定义 由不同元素组成的集合,集合中是一组无序排列的哈希值,可以作为字典的key 2.特性 无序,不同元素组成,必须是不可变类型 3.set输出与去重 s=set(' ...