initial commit
This commit is contained in:
		
						commit
						3dfc7e093f
					
				
					 2 changed files with 72 additions and 0 deletions
				
			
		
							
								
								
									
										52
									
								
								huffman.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								huffman.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,52 @@ | ||||||
|  | package huff | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"container/heap" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type Node struct { | ||||||
|  | 	Weight int64 | ||||||
|  | 	Value  interface{} | ||||||
|  | 	Left   *Node | ||||||
|  | 	Right  *Node | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (n Node) Lookup(value interface{}) *Node { | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewPathTree(paths []string) *Node { | ||||||
|  | 	nodes := []Node{} | ||||||
|  | 	for i := range paths { | ||||||
|  | 		node := Node{Weight: int64(i + 1), Value: paths[i]} | ||||||
|  | 		nodes = append(nodes, node) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	nodeHeap := nodeInterface(nodes) | ||||||
|  | 	heap.Init(nodeHeap) | ||||||
|  | 
 | ||||||
|  | 	return &Node{} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func Combine(left *Node, right *Node) *Node { | ||||||
|  | 	var weight int64 | ||||||
|  | 	if left != nil { | ||||||
|  | 		weight = weight + left.Weight | ||||||
|  | 	} | ||||||
|  | 	if right != nil { | ||||||
|  | 		weight = weight + right.Weight | ||||||
|  | 	} | ||||||
|  | 	return &Node{ | ||||||
|  | 		Weight: weight, | ||||||
|  | 		Left:   left, | ||||||
|  | 		Right:  right, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type nodeInterface []Node | ||||||
|  | 
 | ||||||
|  | func (ni nodeInterface) Push(x interface{}) {} | ||||||
|  | func (ni nodeInterface) Pop() interface{}   { return Node{} } | ||||||
|  | func (ni nodeInterface) Len() int           { return len(ni) } | ||||||
|  | func (ni nodeInterface) Less(i, j int) bool { return ni[i].Weight < ni[j].Weight } | ||||||
|  | func (ni nodeInterface) Swap(i, j int)      { ni[i], ni[j] = ni[j], ni[i] } | ||||||
							
								
								
									
										20
									
								
								huffman_test.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								huffman_test.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | ||||||
|  | package huff | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  |   "fmt" | ||||||
|  |   "testing" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func TestNode(t *testing.T) { | ||||||
|  |   paths := []string{ | ||||||
|  |     "/content/dist/rhel/server/6/$releasever/$relarch/os", | ||||||
|  |     "/content/dist/rhui/server/6/$releasever/$relarch/os", | ||||||
|  |     "/content/beta/rhel/server/6/$releasever/$relarch/os", | ||||||
|  |     "/content/beta/rhel/server/7/$releasever/$relarch/os", | ||||||
|  |     "/content/beta/rhui/server/6/$releasever/$relarch/os", | ||||||
|  |     "/content/beta/rhui/server/7/$releasever/$relarch/os", | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   pt := NewPathTree(paths) | ||||||
|  |   fmt.Printf("%#v\n", pt) | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue