Secuencia del árbol Huffman (pitón de la Copa Blue Bridge)

Descripción del problema El
  árbol de Huffman tiene una amplia gama de aplicaciones en la codificación. Aquí, solo nos preocupamos por el proceso de construcción del árbol de Huffman.
  Dado un número de columna {pi} = {p0, p1,…, pn-1}, el proceso de construcción de un árbol de Huffman con este número de columna es el siguiente:
  1. Encuentre los dos números más pequeños en {pi} y configúrelos como pa y pb, Elimine pa y pb de {pi} y luego agregue su suma a {pi}. El costo de este proceso se registra como pa + pb.
  2. Repita el paso 1 hasta que solo quede un número en {pi}.
  En la operación anterior, sumando todos los costos, obtiene el costo total de construcción del árbol de Huffman.
  La tarea de esta pregunta: Para una secuencia dada, ahora encuentre el costo total de construir un árbol de Huffman con la secuencia.

Por ejemplo, para la secuencia {pi} = {5, 3, 8, 2, 9}, el proceso de construcción del árbol de Huffman es el siguiente:
  1. Encuentra los dos números más pequeños en {5, 3, 8, 2, 9}, que son 2 y 3, elimínelos de {pi} y agregue la suma 5 para obtener {5, 8, 9, 5}, el costo es 5.
  2. Encuentra los dos números más pequeños en {5, 8, 9, 5}, que son 5 y 5, bórralos de {pi} y suma la suma 10 a {8, 9, 10}, cuesta 10 .
  3. Encuentre los dos números más pequeños en {8, 9, 10}, que son 8 y 9, elimínelos de {pi} y sume la suma 17 a {10, 17}, y el costo es 17.
  4. Encuentre los dos números más pequeños en {10, 17}, que son 10 y 17, elimínelos de {pi} y sume la suma 27 a {27}, y el costo es 27.
  5. Ahora, solo queda un número 27 en la secuencia, el proceso de construcción termina y el costo total es 5 + 10 + 17 + 27 = 59.
Para una secuencia dada, calcule el costo total de construir un árbol de Huffman con la secuencia

La respuesta es la siguiente :

n = int(input())
x = [int(i) for i in input().split()]
price=[0 for i in range(0,n-1)]   #创建一个全0的列表,存储每步相加的和
for i in range(0,n-1):
    x.sort()
    price_1 = x.pop(0)   #将排序后最小的数取出来
    price_2 = x.pop(0)
    price[i] = price_1+price_2
    x.append(price[i])  #将和加入列表,继续循环
print(sum(price))

Supongo que te gusta

Origin blog.csdn.net/qq_45701131/article/details/105590925
Recomendado
Clasificación