试题 基础练习 Huffuman树

简介: 试题 基础练习 Huffuman树

试题 基础练习 Huffuman树

资源限制

内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s

问题描述

  Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。

  给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下:

  1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。

  2. 重复步骤1,直到{pi}中只剩下一个数。

  在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。

  本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。

例如,对于数列{pi}={5, 3, 8, 2, 9},Huffman树的构造过程如下:

  1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。

  2. 找到{5, 8, 9, 5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8, 9, 10},费用为10。

  3. 找到{8, 9, 10}中最小的两个数,分别是8和9,从{pi}中删除它们并将和17加入,得到{10, 17},费用为17。

  4. 找到{10, 17}中最小的两个数,分别是10和17,从{pi}中删除它们并将和27加入,得到{27},费用为27。

  5. 现在,数列中只剩下一个数27,构造过程结束,总费用为5+10+17+27=59。

输入格式

  输入的第一行包含一个正整数n(n<=100)。

  接下来是n个正整数,表示p0, p1, …, pn-1,每个数不超过1000。

输出格式

  输出用这些数构造Huffman树的总费用。

样例输入

5

5 3 8 2 9

样例输出

59

n = int(input())
l = list(map(int, input().split()))
l.sort()
sum = 0
while (len(l) != 1):
    t = l.pop(0) + l.pop(0)
    sum += t
    l.append(t)
    l.sort()
print(sum)
相关文章
|
机器学习/深度学习 存储 算法
【数据结构与算法篇】 二叉树的性质(补充)
【数据结构与算法篇】 二叉树的性质(补充)
87 0
|
6月前
|
算法
【数据结构与算法】二叉树的综合运用--2
【数据结构与算法】二叉树的综合运用--2
|
6月前
|
算法
【数据结构与算法】二叉树的综合运用--1
【数据结构与算法】二叉树的综合运用--1
|
6月前
|
C++
C++【二叉树进阶试题】
C++【二叉树进阶试题】
49 0
经典二叉树试题(一)
经典二叉树试题(一)
77 0
经典链表试题(二)
经典链表试题(二)
74 0
|
存储 索引
经典链表试题(一)
经典链表试题(一)
67 0
|
机器学习/深度学习 算法
2022 数据结构与算法《王道》学习笔记 (十二)树和二叉树 详细总结
2022 数据结构与算法《王道》学习笔记 (十二)树和二叉树 详细总结
【考试必考点——哈夫曼树】(贪心算法实现)
一、什么是哈夫曼树 当用 n 个结点(都做叶子结点且都有各自的权值)试图构建一棵树时,如果构建的这棵树的带权路径长度最小,称这棵树为“最优二叉树”,有时也叫“赫夫曼树”或者“哈夫曼树”。 二、哈夫曼树相关概念 1.路径 在一棵树中,一个结点到另一个结点之间的通路,称为路径。
|
算法
【数据结构与算法分析】0基础带你学数据结构与算法分析07--二叉树
在学习上一章后,我们对树加以限制,如果树的度为 2,那么就称这颗树为 二叉树 (binary tree)。
37124 5
【数据结构与算法分析】0基础带你学数据结构与算法分析07--二叉树