当前位置:网站首页>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;
}
边栏推荐
- Servlet simple verification code generation
- [leetcode daily question] a single element in an ordered array
- 2022 electrician (elementary) examination question bank and electrician (elementary) simulation examination question bank
- Is Shengang securities company as safe as other securities companies
- Create template profile
- Customize redistemplate tool class
- MySQL - use of aggregate functions and group by groups
- Remember another interview trip to Ali, which ends on three sides
- Chinese Mitten Crab - current market situation and future development trend
- IPv6 experiment
猜你喜欢

SRCNN:Learning a Deep Convolutional Network for Image Super-Resolution

The boss said: whoever wants to use double to define the amount of goods, just pack up and go

Feign implements dynamic URL

Ka! Why does the seat belt suddenly fail to pull? After reading these pictures, I can't stop wearing them

Should enterprises start building progressive web applications?

What is the student party's Bluetooth headset recommendation? Student party easy to use Bluetooth headset recommended

Install the pit that the electron has stepped on

LeetCode226. Flip binary tree

Rearrangement of tag number of cadence OrCAD components and sequence number of schematic page

LeetCode 168. Detailed explanation of Excel list name
随机推荐
Jerry's modification setting status [chapter]
Conditional statements of shell programming
The boss said: whoever wants to use double to define the amount of goods, just pack up and go
C import Xls data method summary IV (upload file de duplication and database data De duplication)
ES6 deletes an attribute in all array objects through map, deconstruction and extension operators
Life cycle of instance variables, static variables and local variables
LeetCode 168. Detailed explanation of Excel list name
Feign implements dynamic URL
Gee: create a new feature and set corresponding attributes
Neo4j learning notes
Luogu p1309 Swiss wheel
Huawei cloud micro certification Huawei cloud computing service practice has been stable
Notice on Soliciting Opinions on the draft of information security technology mobile Internet application (APP) life cycle security management guide
C import Xls data method summary I (upload files and create Workbooks)
Audio resource settings for U3D resource management
Solution to the problem that jsp language cannot be recognized in idea
Chain ide -- the infrastructure of the metauniverse
Intel's new GPU patent shows that its graphics card products will use MCM Packaging Technology
mysql使用視圖報錯,EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
TP5 automatic registration hook mechanism hook extension, with a complete case