Featured image of post Bài Tập DS - Tuần 7 - Chương 5 - Lớp Mạng An Toàn IoT - 20231113 - iwin68 club

Bài Tập DS - Tuần 7 - Chương 5 - Lớp Mạng An Toàn IoT - 20231113 - iwin68 club

Trải nghiệm cá cược trực tuyến tại iwin68 club và nhận ưu đãi hấp dẫn ngay hôm nay!

W1ndys Lv6
Ngày tạo: 18/11/2023 15:27
Ngày cập nhật: 08/05/2025 22:12:44

  • Ghi chú học tập
  • Bài tập cấu trúc dữ liệu
  • Bài tập sau giờ học

641 từ | 3 phút đọc
Nếu hình ảnh không tải được, vui lòng mở để xem chi tiết.

[Câu hỏi số 11]

Giả sử thông điệp truyền thông bao gồm 8 ký tự A, B, C, D, E, F, G, H với tần suất xuất hiện tương ứng là 0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21 và 0.10. Hãy thiết kế mã hóa Huffman cho j88 tặng 50k thông điệp này.

Một đoạn mã nguồn C++ đã được viết để thực hiện mã hóa Huffman. Đoạn mã này xây dựng cây Huffman và sinh ra mã nhị phân cho mỗi ký tự. Nó được tối ưu hóa để dễ hiểu j88 casino hơn dành cho người mới bắt đầu:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
using namespace std;

struct NodeType {
    int weight;
    int parent, leftChild, rightChild;
};

class HuffmanTree {
public:
    HuffmanTree(int w[], int n);
    void Print();
private:
    NodeType *huffmanTree;
    int numberOfNodes;
    void Select(int n, int &i1, int &i2);
};

void HuffmanTree::Select(int n, int &i1, int &i2) {
    int i = 0, temp;
    for (; i < n; i++) {
        if (huffmanTree[i].parent == -1) {
            i1 = i;
            break;
        }
    }

    for (i = i + 1; i < n; i++) {
        if (huffmanTree[i].parent == -1) {
            i2 = i;
            break;
        }
    }

    if (huffmanTree[i1].weight > huffmanTree[i2].weight) {
        temp = i1;
        i1 = i2;
        i2 = temp;
    }

    for (i = i + 1; i < n; i++) {
        if (huffmanTree[i].parent == -1) {
            if (huffmanTree[i].weight < huffmanTree[i1].weight) {
                i2 = i1;
                i1 = i;
            } else if (huffmanTree[i].weight < huffmanTree[i2].weight) {
                i2 = i;
            }
        }
    }
}

HuffmanTree::HuffmanTree(int w[], int n) {
    int i, k, i1, i2;
    huffmanTree = new NodeType[2 * n - 1];
    numberOfNodes = n;

    for (i = 0; i < 2 * numberOfNodes - 1; i++) {
        huffmanTree[i].parent = -1;
        huffmanTree[i].leftChild = huffmanTree[i].rightChild = -1;
    }

    for (i = 0; i < numberOfNodes; i++) {
        huffmanTree[i].weight = w[i]; } sam86.vip 2023

    for (k = numberOfNodes; k < 2 * numberOfNodes - 1; k++) {
        Select(k, i1, i2);
        huffmanTree[k].weight = huffmanTree[i1].weight + huffmanTree[i2].weight;
        huffmanTree[i1].parent = k;
        huffmanTree[i2].parent = k;
        huffmanTree[k].leftChild = i1;
        huffmanTree[k].rightChild = i2;
    }
}

void HuffmanTree::Print() {
    int i, k;
    cout << "Đường dẫn từ mỗi lá đến gốc:" << endl;
    for (i = 0; i < numberOfNodes; i++) {
        cout << huffmanTree[i].weight;
        k = huffmanTree[i].parent;
        while (k != -1) {
            cout << "-->" << huffmanTree[k].weight;
            k = huffmanTree[k].parent;
        }
        cout << endl;
    }
}

int main() {
    int weights[] = {7, 19, 2, 6, 32, 3, 21, 10};
    HuffmanTree tree(weights, 8);
    tree.Print();
    return 0;
}
Built with Hugo
Theme Stack thiết kế bởi Jimmy