当前位置:网站首页>Question C: Huffman tree
Question C: Huffman tree
2022-07-04 01:57:00 【Wait for dawn forever】
Title Description
Huffman tree , Enter a number in the first line n, Represents the number of leaf nodes . You need to use these leaf nodes to generate a Huffman tree , According to the concept of Huffman tree , These nodes have weights , namely weight, The question needs to output the sum of the product of the value and weight of all nodes .
Input
Input has multiple sets of data .
Enter a number in the first row of each group n, Then the input n Leaf nodes ( The weight of leaf nodes does not exceed 100,2<=n<=1000).
Output
Output weights .
The sample input
2
2 8
3
5 11 30
Sample output
10
62
Train of thought : Use priority queue to calculate directly .
#include <cstdio>
#include <queue>
using namespace std;
// Priority queue representing small top heap
priority_queue<int, vector<int>, greater<int>> q;
int main() {
int n, temp, x, y;
while (scanf("%d", &n) != EOF) {
int sum = 0;
for (int i = 0; i < n; ++i) {
scanf("%d", &temp);
q.push(temp);
}
while (q.size() > 1) {
x = q.top();
q.pop();
y = q.top();
q.pop();
q.push(x + y); // The sum of the two is added to the priority queue as a new number
sum += x + y;
}
q.pop();
printf("%d\n", sum);
}
return 0;
}
Train of thought two : Construct the Huffman tree , Top down traversal .
#include <cstdio>
#include <climits>
#include <algorithm>
using namespace std;
const int maxn = 1010;
struct HuffmanNode {
int weight, flag;
int parent, lchild, rchild;
} Node[maxn * 2];
void searchMin(int &a, int &b, int n) {
int min = INT_MAX;
// Find the decimal number a
for (int i = 1; i <= n; i++) {
if (Node[i].parent == 0 && Node[i].weight < min) {
min = Node[i].weight;
a = i;
}
}
min = INT_MAX;
// Find the sequence number of the next decimal b
for (int i = 1; i <= n; i++) {
if (Node[i].parent == 0 && Node[i].weight < min && i != a) {
min = Node[i].weight;
b = i;
}
}
// Guarantee serial number a Less than serial number b
if (a > b) {
swap(a, b);
}
}
int HuffmanCode(int n, int *w) {
int m = 2 * n - 1;
// Initialize original n Leaf node
for (int i = 1; i <= n; i++) {
Node[i].parent = Node[i].lchild = Node[i].rchild = 0;
Node[i].weight = w[i];
}
// structure Huffman Binary tree
for (int i = n + 1; i <= m; i++) {
int a, b;
searchMin(a, b, i - 1);
Node[i].lchild = a;
Node[i].rchild = b;
Node[i].weight = Node[a].weight + Node[b].weight;
Node[a].parent = Node[b].parent = i; // Mark parent node
}
int ans = 0, len = 0;
while (m) {
if (Node[m].flag == 0) {
// towards the left
Node[m].flag = 1; // Mark that the left subtree has been accessed
if (Node[m].lchild != 0) {
m = Node[m].lchild;
len++;
} else if (Node[m].rchild == 0) {
// leaf node
ans += Node[m].weight * len;
}
} else if (Node[m].flag == 1) {
// towards the right
Node[m].flag = 2; // Mark that the right subtree has been accessed
if (Node[m].rchild != 0) {
m = Node[m].rchild;
len++;
}
} else {
// return
Node[m].flag = 0;
m = Node[m].parent;
--len; // Code length minus 1
}
}
return ans;
}
int main() {
int n, w[maxn];
while (scanf("%d", &n) != EOF) {
for (int i = 1; i <= n; i++) {
scanf("%d", &w[i]);
}
int ans = HuffmanCode(n, w);
printf("%d\n", ans);
}
return 0;
}
边栏推荐
- Software product download collection
- C import Xls data method summary II (save the uploaded file to the DataTable instance object)
- Lightweight Pyramid Networks for Image Deraining
- Infiltration learning diary day19
- Conditional statements of shell programming
- 2020-12-02 SSM advanced integration Shang Silicon Valley
- Applet graduation project based on wechat selection voting applet graduation project opening report function reference
- Containerization technology stack
- The automatic control system of pump station has powerful functions and diverse application scenarios
- Example 072 calculation of salary it is known that the base salary of an employee of a company is 500 yuan. The amount of software sold by the employee and the Commission method are as follows: Sales
猜你喜欢
Applet graduation design is based on wechat course appointment registration. Applet graduation design opening report function reference
51 MCU external interrupt
The reasons why QT fails to connect to the database and common solutions
Small program graduation project based on wechat examination small program graduation project opening report function reference
Override and virtual of classes in C #
Make drop-down menu
Infiltration learning diary day19
Jerry's modification setting status [chapter]
String hash, find the string hash value after deleting any character, double hash
MySQL statement learning record
随机推荐
Conditional test, if, case conditional test statements of shell script
After listening to the system clear message notification, Jerry informed the device side to delete the message [article]
Mongodb learning notes: command line tools
LeetCode226. Flip binary tree
Applet graduation project based on wechat selection voting applet graduation project opening report function reference
Infiltration learning diary day19
A fan summed up so many interview questions for you. There is always one you need!
Ceramic metal crowns - current market situation and future development trend
Gnupg website
A. ABC
ThinkPHP uses redis to update database tables
Functions and arrays of shell scripts
Méthode de calcul de la connexion MSSQL de la carte esp32c3
Feign implements dynamic URL
Reading notes - learn to write: what is writing?
Logical operator, displacement operator
Remember another interview trip to Ali, which ends on three sides
Will the memory of ParticleSystem be affected by maxparticles
Chinese Mitten Crab - current market situation and future development trend
Cancer biopsy instruments and kits - market status and future development trends