Advertisement
homer512

shuffle random merge

May 4th, 2024
625
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.88 KB | Source Code | 0 0
  1. #!/usr/bin/env python3
  2.  
  3.  
  4. import collections
  5. import random
  6.  
  7.  
  8. def merge_random(left, right):
  9.     choices = [0] * len(left) + [1] * len(right)
  10.     random.shuffle(choices)
  11.     readpositions = [iter(left), iter(right)]
  12.     return [next(readpositions[choice]) for choice in choices]
  13.  
  14.  
  15. def make_shuffle():
  16.     sequence = [1, 2, 3, 4]
  17.     # Step 1: Directly shuffle blocks that fit into memory
  18.     blocks = [sequence[:2], sequence[2:]]
  19.     for block in blocks:
  20.         random.shuffle(block)
  21.     # Step 2: Pairwise shuffle blocks. For more blocks, repeat
  22.     merged_block = merge_random(*blocks)
  23.     return merged_block
  24.  
  25.  
  26. def main():
  27.     counter = collections.Counter(
  28.             tuple(make_shuffle()) for _ in range(1_000_000))
  29.     for value, key in sorted((value, key) for key, value in counter.items()):
  30.         print(value, key)
  31.  
  32.  
  33. if __name__ == '__main__':
  34.     main()
  35.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement