mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +00:00
Improves readability and processing time (#4510)
* Removes overuse of lambdas, improves readability and processing time when it finds bitstring to print out. Removes overuse of lambdas, uses dictionary instead. This improves readability and processing time when it finds the bitstring to print out. * Update huffman.py
This commit is contained in:
parent
307ffd8c29
commit
2cbadc88ab
|
@ -5,7 +5,7 @@ class Letter:
|
|||
def __init__(self, letter, freq):
|
||||
self.letter = letter
|
||||
self.freq = freq
|
||||
self.bitstring = ""
|
||||
self.bitstring = {}
|
||||
|
||||
def __repr__(self):
|
||||
return f"{self.letter}:{self.freq}"
|
||||
|
@ -51,10 +51,10 @@ def build_tree(letters):
|
|||
def traverse_tree(root, bitstring):
|
||||
"""
|
||||
Recursively traverse the Huffman Tree to set each
|
||||
Letter's bitstring, and return the list of Letters
|
||||
Letter's bitstring dictionary, and return the list of Letters
|
||||
"""
|
||||
if type(root) is Letter:
|
||||
root.bitstring = bitstring
|
||||
root.bitstring[root.letter] = bitstring
|
||||
return [root]
|
||||
letters = []
|
||||
letters += traverse_tree(root.left, bitstring + "0")
|
||||
|
@ -65,20 +65,21 @@ def traverse_tree(root, bitstring):
|
|||
def huffman(file_path):
|
||||
"""
|
||||
Parse the file, build the tree, then run through the file
|
||||
again, using the list of Letters to find and print out the
|
||||
again, using the letters dictionary to find and print out the
|
||||
bitstring for each letter.
|
||||
"""
|
||||
letters_list = parse_file(file_path)
|
||||
root = build_tree(letters_list)
|
||||
letters = traverse_tree(root, "")
|
||||
print(f"Huffman Coding of {file_path}: ")
|
||||
letters = {
|
||||
k: v for letter in traverse_tree(root, "") for k, v in letter.bitstring.items()
|
||||
}
|
||||
print(f"Huffman Coding of {file_path}: ")
|
||||
with open(file_path) as f:
|
||||
while True:
|
||||
c = f.read(1)
|
||||
if not c:
|
||||
break
|
||||
le = list(filter(lambda l: l.letter == c, letters))[0]
|
||||
print(le.bitstring, end=" ")
|
||||
print(letters[c], end=" ")
|
||||
print()
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user