পাইথন / নম্পপিতে আমি এই কোডটি লিখেছি
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)
এটি দুটি এলোমেলো অ্যারেগুলির সংশ্লেষণের সংখ্যা গণনা করছে, একটি যা একটি নির্দিষ্ট সম্ভাবনার বন্টন সহ অন্যটির তুলনায় একটি দীর্ঘ, এটি প্রথম অবস্থানে একটি 0 বা উভয় পদে 0 রয়েছে।
আমার এক বন্ধুর সাথে বাজি ছিল যা বলে যে পাইথন কোড লেখার জন্য একটি ভয়ঙ্কর ভাষা যার দ্রুত হওয়া দরকার। এটি আমার কম্পিউটারে 9s লাগে। তিনি বলেছেন যে "যথাযথ ভাষায়" লিখিত হলে এটি 100 গুণ দ্রুত করা যায়।
চ্যালেঞ্জটি হ'ল এই কোডটি আপনার পছন্দের যে কোনও ভাষায় 100 গুণ দ্রুত তৈরি করতে পারে কিনা তা দেখার বিষয়। আমি আপনার কোডটি পরীক্ষা করব এবং এখন থেকে এক সপ্তাহের মধ্যে দ্রুততম বিজয়ী হব। যদি কেউ 0.09 এর নীচে থেকে যায় তবে তারা স্বয়ংক্রিয়ভাবে জিতে যায় এবং আমি হেরে যাই।
অবস্থা
- পাইথন । অ্যালিস্টায়ার বাক্সন 30 গতি বাড়িয়েছেন! দ্রুততম সমাধান না হলেও এটি আসলে আমার প্রিয়।
- অষ্টাভ । @ থোথস দ্বারা 100 গুণ গতি বাড়ান।
- মরচে । @ Dbaupp দ্বারা 500 বার গতি বাড়ান।
- সি ++ । গাই স্যারটন দ্বারা 570 বার গতি বাড়ানো।
- গ । @ গতিবেগ দ্বারা 727 গুণ গতিবেগ।
- সি ++ । অবিশ্বাস্যরূপে @ স্টেফান দ্বারা দ্রুত।
দ্রুততম সমাধানগুলি এখন সংবেদনশীল সময়ের চেয়ে খুব দ্রুত। আমি অতএব n টি 10 এ বৃদ্ধি করেছি এবং সেরাগুলির সাথে তুলনা করতে এটির = 100000 সেট করেছি। এই পরিমাপের অধীনে দ্রুততম হয়।
- গ । 7.5s @ace দ্বারা
- সি ++ । @ স্টেফান দ্বারা 1 এস।
আমার মেশিনের সময়গুলি আমার মেশিনে চালিত হবে। এটি একটি এএমডি এফএক্স-8350 এইট-কোর প্রসেসরে একটি স্ট্যান্ডার্ড উবুন্টু ইনস্টল। এর অর্থ হল আপনার কোডটি চালাতে আমার সক্ষম হওয়া দরকার।
আপ পোস্ট অনুসরণ হিসাবে এই প্রতিযোগিতার বরং খুব x100 speedup পেতে সহজ ছিল, আমি যারা তাদের গতি গুরু দক্ষতার ব্যায়াম করতে চান তাদের জন্য একটি ফলোআপ পোস্ট করেছেন। দেখুন কিভাবে ধীর পাইথন সত্যিই (পার্ট II)?