|
|
1.1 root 1: .TH HUFF 3
2: .CT 2 data_man
3: .SH NAME
4: huff \(mi huffman codebook/tree generator
5: .SH SYNOPSIS
6: .nf
7: .B #include <huff.h>
8: .PP
9: .B NODE *huff(inrout)
10: .B int (*inrout)();
11: .fi
12: .SH DESCRIPTION
13: .I Huff
14: generates a binary Huffman codebook.
15: It obtains a list of messages one at a time from an input routine,
16: .I inrout,
17: declared as
18: .IP
19: .EX
20: int inrout(str, p)
21: char ** str;
22: float *p;
23: .EE
24: .LP
25: .I Inrout
26: makes
27: .I *str
28: point to a null-terminated string identifying a message,
29: and places in
30: .I *p
31: the (arbitrarily normalized) frequency of the message.
32: .I Inrout
33: returns non-zero when data is returned and zero when there
34: is no more data.
35: .PP
36: .I Huff
37: returns a pointer to a root of type
38: .BR NODE :
39: .IP
40: .EX
41: typedef struct node {
42: char *datump;
43: struct node *to;
44: struct node *from;
45: struct node *ldad;
46: struct node *rdad;
47: struct node *kid;
48: float prob;
49: } NODE;
50: .EE
51: .LP
52: The root heads a linked list and the Huffman tree.
53: The doubly linked list,
54: connected via
55: .B from
56: and
57: .BR to ,
58: is ordered as the codebook was generated.
59: The tree is connected
60: via
61: .BR kid ,
62: .BR ldad ,
63: and
64: .BR rdad ,
65: with null pointers at the various ends.
66: The
67: .B kid
68: field points towards the root,
69: .B ldad
70: and
71: .B rdad
72: point away:
73: .B node->ldad->kid==node
74: and
75: .BR node->rdad->kid==node .
76: the
77: .B datump
78: field is null or points to a message identifier.
79: .PP
80: The codeword for a message may be read off from the
81: path from the root to the node containing the message identifier,
82: counting
83: .I ldad
84: branches as 0 and
85: .I rdad
86: branches as 1.
87: .SH "BUGS"
88: A code with only one message dumps core.
89:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.