当前位置:网站首页>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;
}
边栏推荐
- ES6 deletes an attribute in all array objects through map, deconstruction and extension operators
- Why is the operation unsuccessful (unresolved) uncaught syntaxerror: invalid or unexpected token (resolved)
- Small program graduation project based on wechat video broadcast small program graduation project opening report function reference
- Do you know the eight signs of a team becoming agile?
- Chapter 3.4: starrocks data import - Flink connector and CDC second level data synchronization
- Iclr2022 | ontoprotein: protein pre training integrated with gene ontology knowledge
- All ceramic crowns - current market situation and future development trend
- Rearrangement of tag number of cadence OrCAD components and sequence number of schematic page
- G3 boiler water treatment registration examination and G3 boiler water treatment theory examination in 2022
- Introduction to superresolution
猜你喜欢

String hash, find the string hash value after deleting any character, double hash

Install the pit that the electron has stepped on

Douban scoring applet Part-3

MySQL deadly serial question 2 -- are you familiar with MySQL index?

High level application of SQL statements in MySQL database (I)

SQL statement

Remember another interview trip to Ali, which ends on three sides

Gee: create a new feature and set corresponding attributes

What are the advantages and disadvantages of data center agents?
![Jerry's watch listens to the message notification of the target third-party software and pushes the message to the device [article]](/img/8b/ff062f34d36e1caa9909c8ab431daf.jpg)
Jerry's watch listens to the message notification of the target third-party software and pushes the message to the device [article]
随机推荐
Trading software programming
When the watch system of Jerry's is abnormal, it is used to restore the system [chapter]
2022 new examination questions for safety management personnel of hazardous chemical business units and certificate examination for safety management personnel of hazardous chemical business units
Chain ide -- the infrastructure of the metauniverse
Conditional test, if, case conditional test statements of shell script
Iclr2022 | ontoprotein: protein pre training integrated with gene ontology knowledge
Applet graduation project is based on wechat classroom laboratory reservation applet graduation project opening report function reference
Software product download collection
Remember a lazy query error
Development of user-defined navigation bar in uniapp
The reasons why QT fails to connect to the database and common solutions
Jerry's update contact [article]
Three layer switching ①
Some other configurations on Huawei's spanning tree
What is the student party's Bluetooth headset recommendation? Student party easy to use Bluetooth headset recommended
Luogu p1309 Swiss wheel
51 MCU external interrupt
C import Xls data method summary V (complete code)
In yolov5, denselayer is used to replace focus, and the FPN structure is changed to bi FPN
Jerry's watch listens to the message notification of the target third-party software and pushes the message to the device [article]