Guest User

Untitled

a guest
Dec 13th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. class Node:
  2. def __init__(self,data,internal=False):
  3. self.data = data #frequecny of a char
  4. self.internal = internal
  5. self.visited = False
  6. self.left = None
  7. self.right = None
  8.  
  9. self.prefix =""
  10.  
  11.  
  12. class HuffmanTree:
  13. def __init__(self,root=None):
  14. self.root = root
  15.  
  16. def insert(self,data_list):
  17. #creating all leaf nodes and storing as node_list
  18. node_list = []
  19. x = 0
  20. for i in data_list:
  21. node_list.insert(x,Node(data_list[x]))
  22. x = x+1
  23. #creating huffman tree
  24. while True:
  25.  
  26. if(len(node_list)>1):
  27.  
  28. s1 = node_list[0].data
  29. s2 = node_list[1].data
  30. s = s1+s2
  31.  
  32. #creating internal node
  33. IN = Node(s,internal=True)
  34. IN.left = node_list[0]
  35. IN.right = node_list[1]
  36.  
  37. ##deleting used leafs/nodes
  38. #deleting from list from head
  39. if len(node_list)>=2:
  40. del node_list[0]
  41. del node_list[0]
  42. else:
  43. del node_list[0]
  44.  
  45. #inserting new internal node (IN)
  46. node_list.insert(0,IN)
  47. sort_nodes(node_list)
  48. else:
  49. self.root = node_list[0]
  50. break
  51.  
  52. def sort_nodes(A):
  53. #selection sort algorithm
  54. for i in range(len(A)):
  55.  
  56. # Find the minimum element in remaining
  57. # unsorted array
  58. min_idx = i
  59. for j in range(i+1, len(A)):
  60. if A[min_idx].data > A[j].data:
  61. min_idx = j
  62.  
  63. A[i], A[min_idx] = A[min_idx], A[i]
  64. return A
  65.  
  66. def printCode(node,prefix):
  67. if node.left:
  68. node.prefix = node.prefix+"0"
  69. printCode(node.left,node.prefix)
  70.  
  71. if node.right:
  72. node.prefix = node.prefix+"1"
  73. printCode(node.right,node.prefix)
  74.  
  75. if node.internal ==False:
  76. print(node.data,node.prefix)
  77.  
  78.  
  79. b = [9,5,12,13,16,45]
  80. b.sort()
  81. c = HuffmanTree()
  82. c.insert(b)
  83. printCode(c.root,"")
Add Comment
Please, Sign In to add comment