给出一数组pi=[p0, p1, ..., pn-1],用这个数组构造成一个Huffman树,过程如下: 1. 找到pi中最小的两个数,设为pa和pb,将pa和pb从pi中删除掉,然后将它们的和加入到pi中。这个过程的费用记为pa + pb。 2. 重复步骤1,直到pi中只剩下一个数。 在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。 请你编写一个程序,:对于给定的一个数组,输出构造Huffman树的总费用。 【输入描述】 输入两行 第一行输入整数n,表示数组的长度。 第二行n个整数,表示构成数组的元素,用空格隔开。
时间: 2024-02-05 13:13:38 浏览: 123
MATLAB基础入门教程 MATLAB2008a mbook系列课程 03-数值数组及向量化运算 共13页.pdf
以下是Python3代码实现:
```python
n = int(input())
pi = list(map(int, input().split()))
total_cost = 0
while len(pi) > 1:
# 找到最小的两个数
min_idx1 = pi.index(min(pi))
pi.pop(min_idx1)
min_idx2 = pi.index(min(pi))
pi.pop(min_idx2)
# 计算费用
cost = pi[min_idx1] + pi[min_idx2]
total_cost += cost
# 将新的数加入数组
pi.append(cost)
print(total_cost)
```
输入样例:
```
5
1 2 3 4 5
```
输出样例:
```
33
```
解释:首先找出最小的两个数1和2,将它们删除并将它们的和3加入数组,此时数组为[3, 3, 4, 5],费用为1+2=3。然后找出最小的两个数3和3,将它们删除并将它们的和6加入数组,此时数组为[4, 5, 6],费用为3+3=6。最后找出最小的两个数4和5,将它们删除并将它们的和9加入数组,此时数组为[6, 9],费用为4+5=9。数组中只剩下一个数9,结束循环,总费用为3+6+9=18+15=33。
阅读全文