Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.68 KB | None | 0 0
  1. def bit_prefix(a, b):
  2. min_len = min(len(a), len(b))
  3. if min_len > 0:
  4. x = str(bin(
  5. int(a[::-1].encode('hex'), 16) ^ int(b[::-1].encode('hex'), 16)))
  6. y = x.strip('0')
  7. if len(y) is 1:
  8. return min_len
  9. else:
  10. return (len(x) - len(y)) / 8
  11. else:
  12. return 0
  13.  
  14. a = 'a' * 1000000 + 'z'
  15.  
  16. b = 'a' * 900000 + 'z'
  17.  
  18. timeit.timeit(lambda: bit_prefix(a, b), number=100)
  19. Out[34]: 6.340372534867129
  20.  
  21. timeit.timeit(lambda: len(os.path.commonprefix((a, b))), number=100)
  22. Out[35]: 7.5483549056534684
  23.  
  24. print bit_prefix(a, b), len(os.path.commonprefix((a, b)))
  25. 900000 900000
  26.  
  27. a = 'aaz'
  28.  
  29. b = 'az'
  30.  
  31. timeit.timeit(lambda: bit_prefix(a, b), number=1000000)
  32. Out[42]: 3.968956086175467
  33.  
  34. timeit.timeit(lambda: len(os.path.commonprefix((a, b))), number=1000000)
  35. Out[43]: 1.1592788235707303
  36.  
  37. print bit_prefix(a, b), len(os.path.commonprefix((a, b)))
  38. 1 1
  39.  
  40. Line # Hits Time Per Hit % Time Line Contents
  41. ==============================================================
  42. 29 @profile
  43. 30 def bit_prefix(a, b):
  44. 31 36140 81099 2.2 4.2 min_len = min(len(a), len(b))
  45. 32 36140 49386 1.4 2.5 if min_len > 0:
  46. 33 36140 49739 1.4 2.6 x = str(
  47. 34 36140 47846 1.3 2.5 bin(
  48. 35 36140 47232 1.3 2.4 int(
  49. 36 36140 89499 2.5 4.6 a[::-1]
  50. 37 36140 242994 6.7 12.5 .encode('hex'),
  51. 38 36140 164442 4.6 8.4 16)
  52. 39 ^
  53. 40 36140 49601 1.4 2.5 int(
  54. 41 36140 88745 2.5 4.6 b[::-1]
  55. 42 36140 216488 6.0 11.1 .encode('hex'),
  56. 43 36140 504425 14.0 25.9 16)))
  57. 44 36140 187571 5.2 9.6 y = x.strip('0')
  58. 45 36140 61027 1.7 3.1 if len(y) is 1:
  59. 46 return min_len
  60. 47 else:
  61. 48 36140 67507 1.9 3.5 return (len(x) - len(y)) / 8
  62. 49 else:
  63. 50 return 0
  64.  
  65. differences = int(a[::-1].encode('hex'), 16) ^ int(b[::-1].encode('hex'), 16)
  66. least_significant_difference = differences ^ (differences - 1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement