数据结构实验之二叉树六:哈夫曼编码(SDUT 3345)
题解:离散中的“最小生成树(最优树)”。
#include <bits/stdc++.h>
using namespace std;
void qusort(int l, int r, int a[])
{
int x = a[l];
int i = l, j = r;
if(i >= j)
return ;
while(i < j)
{
while(i < j && a[j] >= x)
j --;
a[i] = a[j];
while(i < j && a[j] <= x)
i ++;
a[j] = a[i];
}
a[i] = x;
qusort(l,i-1,a);
qusort(i+1,r,a);
}
int main()
{
char s[1000];
int t[500];
int q[1000];
while(~scanf("%s", s))
{
int sum1 = 0;
int sum2 = 0;
memset(t,0,sizeof(t));
int len = strlen(s);
sum1 = 8 * len;
for(int i = 0; i < len; i ++)
t[s[i]] ++;
int top = 0;
int rear = 0;
for(int i = 0; i < 500; i ++)
{
if(t[i] != 0)
q[top ++] = t[i];
}
qusort(0,top-1,q);
while(top != rear)
{
int x1 = q[rear ++];
if(top != rear)
{
int x2 = q[rear ++];
sum2 = sum2 + (x1 + x2);
q[top ++] = x1 + x2;
qusort(rear,top-1,q);
}
}
printf("%d %d %.1lf\n", sum1, sum2, 1.0 * sum1 / sum2);
}
return 0;
}
数据结构实验之二叉树六:哈夫曼编码(SDUT 3345)的更多相关文章
- SDUT 3345 数据结构实验之二叉树六:哈夫曼编码
数据结构实验之二叉树六:哈夫曼编码 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 字符的编 ...
- SDUT OJ 数据结构实验之二叉树六:哈夫曼编码
数据结构实验之二叉树六:哈夫曼编码 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...
- 数据结构实验之查找六:顺序查找(SDUT 3378)
(不知道为啥开个数组就 TLE .QAQ) #include <stdio.h> #include <stdlib.h> #include <string.h> / ...
- 数据结构实验之二叉树七:叶子问题(SDUT 3346)
#include <bits/stdc++.h> using namespace std; struct node { char data; struct node *lc, *rc; } ...
- 数据结构实验之二叉树五:层序遍历 (SDUT 3344)
#include <bits/stdc++.h> using namespace std; struct node { char data; struct node *lc, *rc; } ...
- 数据结构实验之二叉树三:统计叶子数 SDUT 3342
#include <stdio.h> #include <string.h> struct node { char data; struct node *l,*r; }; st ...
- 20172332 2017-2018-2 《程序设计与数据结构》Java哈夫曼编码实验--哈夫曼树的建立,编码与解码
20172332 2017-2018-2 <程序设计与数据结构>Java哈夫曼编码实验--哈夫曼树的建立,编码与解码 哈夫曼树 1.路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子 ...
- [C++]哈夫曼树(最优满二叉树) / 哈夫曼编码(贪心算法)
一 哈夫曼树 1.1 基本概念 算法思想 贪心算法(以局部最优,谋求全局最优) 适用范围 1 [(约束)可行]:它必须满足问题的约束 2 [局部最优]它是当前步骤中所有可行选择中最佳的局部选择 3 [ ...
- 数据结构之C语言实现哈夫曼树
1.基本概念 a.路径和路径长度 若在一棵树中存在着一个结点序列 k1,k2,……,kj, 使得 ki是ki+1 的双亲(1<=i<j),则称此结点序列是从 k1 到 kj 的路径. 从 ...
随机推荐
- 原生 js 录屏功能
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- MySQL多表关联查询数量
//多表关联查询数量select user, t1.count1, t2.count2from user tleft join ( select user_id, count(sport_type) ...
- display的属性
在一般的CSS布局制作时候,我们常常会用到display对应值有block.none.inline这三个值.,display这个属性用于定义建立布局时元素生成的显示框类型.对于 HTML 等文档类型, ...
- TypeScript算法与数据结构-栈篇
本文的源码在这里,可以参考一下 栈也是一种使用非常广泛的线性数据结构,它具有后进先出last in first out的特点.通俗的例子就像我们平时一本一本的往上放书,等到我们又想用书时,我们首先接触 ...
- oracle的LAST_DAY()函数
转自:https://blog.csdn.net/u012581453/article/details/53727936 LAST_DAY LAST_DAY函数返回指定日期对应月份的最后一天. 获取当 ...
- 如何在SAP云平台ABAP编程环境里创建自己的Z表
选中ABAP包,右键创建一个新的Database Table: 维护表名为ZBOOKING: 表实现的源代码: @EndUserText.label : 'Jerry''s booking' @Aba ...
- Linux日志查看
Linux日志查看: 1.Last -a 把从何处登入系统的主机名称或IP地址,显示在最后一行.-d 指定记录文件.指定记录文件.将IP地址转换成主机名称.-f <记录文件> 指定记录文 ...
- Apache日志轮询Cronolog安装及简单用法
安装日志轮询工具cronolog: [root@bqh- tools]# tar xf cronolog-.tar.gz [root@bqh- tools]# cd cronolog- [root@b ...
- Go 性能分析之案例一
思考 相信大家在实际的项目开发中会遇到这么一个事,有的程序员写的代码不仅bug少,而且性能高:而有的程序员写的代码能否流畅的跑起来,都是一个很大问题.而我们今天要讨论的就是一个关于性能优化的案例分析. ...
- VUE编译报错 Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead
背景: 在使用VUE添加标签的时候编译报错,报错如下: Component template should contain exactly one root element. If you are u ...