5. 簡易霍夫曼編碼(Huffman encoding)資料壓縮系統
using System.Security.Cryptography;
using System.Security.Cryptography.Pkcs;
namespace Q5
{
public partial class Form1 : Form
{
Label[] labels = new Label[4];
TextBox[] textBoxes = new TextBox[4];
public Form1()
{
InitializeComponent();
for (int i = 0; i < 4; i++)
{
var lbl = new Label();
labels[i] = lbl;
lbl.AutoSize = false;
lbl.Width = 40;
lbl.BorderStyle = BorderStyle.FixedSingle;
var tb = new TextBox();
textBoxes[i] = tb;
tb.Width = 40;
tb.BorderStyle = BorderStyle.FixedSingle;
flowLayoutPanel1.Controls.Add(lbl);
flowLayoutPanel2.Controls.Add(tb);
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
Close();
}
private void button1_Click(object sender, EventArgs e)
{
label10.Text = "";
label7.Text = "";
label6.Text = "";
var n = new Random();
List<int> ns = [];
List<char> ts = [];
for (int i = 0; i < 4; i++)
{
var k = 0;
do
{
k = n.Next(1, 1000);
} while (ns.Contains(k));
char t = 'a';
do
{
t = (char)(n.Next(0, 26) + 'a'); // 注意0-25
} while (ts.Contains(t));
ts.Add(t);
ns.Add(k);
labels[i].Text = t.ToString();
textBoxes[i].Text = k.ToString();
}
}
private void button2_Click(object sender, EventArgs e)
{
var queue = new List<int>(textBoxes.Select(r => int.Parse(r.Text)).ToArray());
var z = (queue.Sum() * 2);
label6.Text = z.ToString();
int k = 0;
while (queue.Count > 1)
{
queue.Sort();
var l = queue.First();
var r = queue[1];
queue.RemoveAt(0);
queue.RemoveAt(0);
queue.Add(l + r);
k += l + r;
}
label7.Text = k.ToString();
label10.Text = (Math.Round((double)z / k * 10000) / 10000).ToString("f4");
}
}
}
Last updated