Tôi có mã này mà tôi đã viết bằng Python / NumPy
from __future__ import division
import numpy as np
import itertools
n = 6
iters = 1000
firstzero = 0
bothzero = 0
""" The next line iterates over arrays of length n+1 which contain only -1s and 1s """
for S in itertools.product([-1, 1], repeat=n+1):
"""For i from 0 to iters -1 """
for i in xrange(iters):
""" Choose a random array of length n.
Prob 1/4 of being -1, prob 1/4 of being 1 and prob 1/2 of being 0. """
F = np.random.choice(np.array([-1, 0, 0, 1], dtype=np.int8), size=n)
"""The next loop just makes sure that F is not all zeros."""
while np.all(F == 0):
F = np.random.choice(np.array([-1, 0, 0, 1], dtype=np.int8), size=n)
"""np.convolve(F, S, 'valid') computes two inner products between
F and the two successive windows of S of length n."""
FS = np.convolve(F, S, 'valid')
if FS[0] == 0:
firstzero += 1
if np.all(FS == 0):
bothzero += 1
print("firstzero: %i" % firstzero)
print("bothzero: %i" % bothzero)
Nó đang đếm số lần tích chập của hai mảng ngẫu nhiên, một mảng dài hơn một mảng, với phân phối xác suất cụ thể, có 0 ở vị trí đầu tiên hoặc 0 ở cả hai vị trí.
Tôi đã đặt cược với một người bạn nói rằng Python là một ngôn ngữ khủng khiếp để viết mã trong đó cần phải nhanh. Phải mất 9 giây trên máy tính của tôi. Ông nói rằng nó có thể được thực hiện nhanh hơn 100 lần nếu được viết bằng "ngôn ngữ phù hợp".
Thách thức là để xem liệu mã này thực sự có thể bằng cách thực hiện nhanh hơn 100 lần trong bất kỳ ngôn ngữ nào bạn chọn. Tôi sẽ kiểm tra mã của bạn và nhanh nhất một tuần kể từ bây giờ sẽ giành chiến thắng. Nếu bất cứ ai đạt dưới 0,09 thì họ sẽ tự động thắng và tôi thua.
Trạng thái
- Con trăn . Tăng tốc 30 lần bởi Alistair Buxon! Mặc dù không phải là giải pháp nhanh nhất nhưng thực tế nó là thứ tôi thích.
- Octave . Tăng tốc 100 lần bởi @Thethos.
- Rỉ sét . Tăng tốc 500 lần bởi @dbaupp.
- C ++ . Tăng tốc gấp 570 lần bởi Guy Sirton.
- C . Tăng tốc 727 lần bởi @ace.
- C ++ . Nhanh đến không ngờ bởi @Stefan.
Các giải pháp nhanh nhất hiện nay quá nhanh để có thời gian hợp lý. Do đó, tôi đã tăng n lên 10 và đặt iters = 100000 để so sánh những cái tốt nhất. Theo biện pháp này nhanh nhất là.
- C . 7.5s bởi @ace.
- C ++ . 1 giây bởi @Stefan.
Máy của tôi Thời gian sẽ được chạy trên máy của tôi. Đây là bản cài đặt Ubuntu tiêu chuẩn trên Bộ xử lý tám lõi AMD FX-8350. Điều này cũng có nghĩa là tôi cần để có thể chạy mã của bạn.
Theo dõi được đăng lên Vì cuộc thi này quá dễ dàng để có được tốc độ x100, tôi đã đăng một bài theo dõi cho những người muốn thực hiện chuyên môn guru tốc độ của họ. Xem Python thực sự chậm như thế nào (Phần II)?