runnig

http://www.careercup.com/question?id=14099679

Jan 23rd, 2013
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.58 KB | None | 0 0
  1. import random
  2. import time
  3. import collections
  4. import sys
  5.  
  6.  
  7.  
  8. def solve(A):
  9.     INT_MAX = sys.maxint
  10.    
  11.     MAX_TABLE = 3
  12.     HASHTABLE = collections.defaultdict(int)   
  13.        
  14.     N = len(A)
  15.    
  16.     for i in range(0, N):
  17.         if len(HASHTABLE) >= MAX_TABLE:
  18.             break
  19.         HASHTABLE[A[i]] += 1
  20.        
  21.     for i in range(i, N):
  22.         if A[i] in HASHTABLE:
  23.             HASHTABLE[A[i]]+=1
  24.  
  25.         elif len(HASHTABLE) < MAX_TABLE:
  26.             HASHTABLE[A[i]] = 1
  27.            
  28.         else:
  29.             # make some room for new element           
  30.            
  31.             # first, find the least frequent
  32.             min_element = None
  33.             min_count = INT_MAX
  34.             for element,count in HASHTABLE.iteritems():
  35.                 if count < min_count:
  36.                     min_element, min_count = element, count
  37.                
  38.             HASHTABLE[min_element] -= 1            
  39.             if HASHTABLE[min_element] <= 1:    
  40.                 del HASHTABLE[min_element]
  41.                 HASHTABLE[A[i]] = 1
  42.    
  43.     #print HASHTABLE, N, N/3
  44.    
  45.     ret = {}
  46.     for element, count in HASHTABLE.iteritems():
  47.         ret[element] = "%.2f%%" % (float(count)/ N)
  48.    
  49.     return ret
  50.    
  51. def main(N):    
  52.  
  53.     N3 = N / 3 + 1
  54.    
  55.    
  56.     A = [1] * N3
  57.     #A.extend([2] * N3)
  58.     #A.extend([3] * (N - len(A))) # int(N3 * 0.5)
  59.        
  60.     L = len(A)
  61.     garbage_size = N - L
  62.     A.extend([random.randint(3,4) for i in range(garbage_size)])
  63.    
  64.     S = solve(A)   
  65.     print S
  66.    
  67.     random.shuffle(A)
  68.     S = solve(A)
  69.     print S
  70.    
  71.    
  72. if __name__=='__main__':
  73.    
  74.     MAX_TESTS = 6 if len(sys.argv) == 1 else int(sys.argv[1])
  75.    
  76.     SCALE = 10e6
  77.    
  78.     N = 10
  79.     for t in range(0, MAX_TESTS):  
  80.         begin = time.clock()
  81.         main(N)
  82.         end = time.clock()
  83.         T = end - begin
  84.         print "test#%d: array_size: %d speed factor:%f" % (t, N, SCALE * (end - begin)/N )
  85.         N *= 10
Add Comment
Please, Sign In to add comment