Preguntas del examen VIP ejercicio básico árbol de Huffuman (lenguaje C) (explicación detallada)

Descripción del problema

  Los árboles de Huffman se utilizan ampliamente en la codificación. Aquí, solo nos preocupamos por el proceso de construcción del árbol de Huffman.
  Dada una lista de números { pi } = { p 0,  p 1,…,  pn -1}, el proceso de construcción de un árbol de Huffman con esta lista de números 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 el proceso de operación anterior, todos los costos se suman para obtener el costo total de construcción del árbol de Huffman.   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, bórralos de { pi } y suma la suma 5 a {5, 8, 9, 5}. El costo es 5.   2. Encuentre los dos números más pequeños en {5, 8, 9, 5}, 5 y 5, elimínelos de { pi } y sume la suma 10 a {8, 9, 10}, costo 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}, a saber, 10 y 17, elimínelos de { pi } y agregue la suma 27 para obtener {27}, el costo es 27.   5. Ahora, solo queda un número 27 en la secuencia. El proceso de construcción ha terminado y el costo total es 5 + 10 + 17 + 27 = 59.



Formato de entrada

  La primera línea de entrada contiene un número entero positivo n ( n <= 100).
  Los siguientes son n números enteros positivos, que representan p 0,  p 1,…,  pn -1, y cada número no excede 1000.

Formato de salida

  Genere el costo total de construcción del árbol de Huffman con estos números.

Entrada de muestra

5
5 3 8 2 9

Salida de muestra

59

Diagrama de mi pensamiento :

(Mira con el código)

 Cada vez que se ordena el orden, la suma de los dos números más pequeños se actualiza al segundo de los dos números agregados.

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int a[110],b[1010],n,i,j;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	scanf("%d",&a[i]);//输入
	int sum=0,k=0;
	
	while(k!=n-1)
	{
		sort(a,a+n);
		
		sum+=a[k]+a[k+1];
		a[k+1]=a[k+1]+a[k];
		k++;
		
	} 
	printf("%d",sum);
	return 0;
}

Esta pregunta sugiere escribir con codicia, pero esta escoria es codiciosa y no sabe escribirlo, es vergonzoso.

Así que lo escribí a mi manera de pensar, pero nunca pensé en ello.

Supongo que te gusta

Origin blog.csdn.net/with_wine/article/details/115008992
Recomendado
Clasificación