Partially implement a Heap
Defining the insert (or "siftup") function described in the "Programming Pearls" book.
This commit is contained in:
		
							parent
							
								
									c841527f61
								
							
						
					
					
						commit
						47c5c6ac05
					
				
					 1 changed files with 30 additions and 0 deletions
				
			
		
							
								
								
									
										30
									
								
								scratch/facebook/heap.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								scratch/facebook/heap.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | ||||||
|  | from math import floor | ||||||
|  | 
 | ||||||
|  | class Heap(object): | ||||||
|  |     def __init__(self): | ||||||
|  |         self.xs = [None] | ||||||
|  |         self.i = 1 | ||||||
|  | 
 | ||||||
|  |     def __repr__(self): | ||||||
|  |         return "[{}]".format(", ".join(str(x) for x in self.xs[1:])) | ||||||
|  | 
 | ||||||
|  |     def insert(self, x): | ||||||
|  |         if len(self.xs) == 1: | ||||||
|  |             self.xs.append(x) | ||||||
|  |             self.i += 1 | ||||||
|  |             return | ||||||
|  |         self.xs.append(x) | ||||||
|  |         i = self.i | ||||||
|  |         while i != 1 and self.xs[floor(i / 2)] > self.xs[i]: | ||||||
|  |             self.xs[floor(i / 2)], self.xs[i] = self.xs[i], self.xs[floor(i / 2)] | ||||||
|  |             i = floor(i / 2) | ||||||
|  |         self.i += 1 | ||||||
|  | 
 | ||||||
|  |     def root(self): | ||||||
|  |         return self.xs[1] | ||||||
|  | 
 | ||||||
|  | xs = Heap() | ||||||
|  | print(xs) | ||||||
|  | for x in [12, 15, 14, 21, 1, 10]: | ||||||
|  |     xs.insert(x) | ||||||
|  |     print(xs) | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue