Skip to content

Instantly share code, notes, and snippets.

@breakds
Last active November 15, 2022 01:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save breakds/62492cf336a916ad9add9e43bf2e003d to your computer and use it in GitHub Desktop.
Save breakds/62492cf336a916ad9add9e43bf2e003d to your computer and use it in GitHub Desktop.
Testing how fast Python 3.11 has become
# CPU: AMD Ryzen 7 3700X (16) @ 3.600GHz
#
# Python 3.9 on NixOS - Time elapsed = 14.530219 seconds
# Python 3.10 on NixOS - Time elapsed = 10.266909 seconds
# Python 3.11 on NixOS - Time elapsed = 5.466192 seconds
import random
import time
class Heap(object):
def __init__(self):
self._size = 0
self._ele = [0]
def insert(self, x):
i = len(self._ele)
self._ele.append(x)
j = i // 2
while j > 0 and self._ele[j] > self._ele[i]:
t = self._ele[j]
self._ele[j] = self._ele[i]
self._ele[i] = t
i = j
j = i // 2
def pop(self):
result = self._ele[1]
self._ele[1] = self._ele[len(self._ele) - 1]
self._ele.pop(-1)
i = 1
while True:
further = None
for j in [i * 2, i * 2 + 1]:
if j < len(self._ele):
if self._ele[j] < self._ele[i]:
t = self._ele[j]
self._ele[j] = self._ele[i]
self._ele[i] = t
further = j
else:
break
if further is None:
break
i = further
return result
def __len__(self):
return len(self._ele) - 1
def main():
n = 1000000
m = 8000
heap = Heap()
result = 0.0
count = 0
for i in range(n):
x = random.random()
heap.insert(x)
if len(heap) > m:
y = heap.pop()
result = result * count + float(str(y))
count = count + 1
result = result / count
print(result)
if __name__ == "__main__":
start = time.time()
main()
end = time.time()
print(f"Time elapsed = {end - start:.6f} seconds")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment