Advertisement
Guest User

count K most frequent items

a guest
Jun 5th, 2022
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.30 KB | None | 0 0
  1. from collections import Counter
  2.  
  3.  
  4. SEQ = 'XYYZYYXYYZYY'
  5. K = 2
  6.  
  7.  
  8. def build_in(sequence, k):
  9.     c = Counter(sequence).most_common(k)
  10.     return dict(c)
  11.  
  12. def frequent(sequence, k):
  13.     counters = {}
  14.     for item in sequence:
  15.         if len(counters) < k:
  16.             counters[item] = counters.get(item, 0) + 1
  17.         elif item in counters:
  18.             counters[item] += 1
  19.         else:
  20.             for key in counters:
  21.                 counters[key] -= 1
  22.             counters = {key: value for key, value in counters.items() if value != 0}
  23.     return counters
  24.  
  25. def space_saving(sequence, k):
  26.     counters = {}
  27.     for item in sequence:
  28.         if len(counters) < k:
  29.             counters[item] = counters.get(item, 0) + 1
  30.         elif item in counters:
  31.             counters[item] += 1
  32.         else:
  33.             least_frequent_item = min(counters, key=counters.get)
  34.             least_frequent_item_count = counters.pop(least_frequent_item)
  35.             counters[item] = least_frequent_item_count + 1
  36.     return counters
  37.  
  38.  
  39. implementations = [build_in, frequent, space_saving]
  40. for implementation in implementations:
  41.     print('[{}]'.format(implementation.__name__))
  42.     print(implementation(SEQ, K))
  43.  
  44.  
  45. # [build_in]
  46. # {'Y': 8, 'X': 2}
  47. # [frequent]
  48. # {'Y': 6}
  49. # [space_saving]
  50. # {'Y': 8, 'Z': 4}
  51.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement