मैं प्रोजेक्ट यूलर पर कुछ समस्याओं को हल करता हूं और किसी समस्या को हल करने के लिए 2 मिलियन प्राइम उत्पन्न करना पड़ता था। इरेटोस्टेनेस की चलनी का मेरा कार्यान्वयन बेहद धीमा हो गया लेकिन मुझे नहीं पता कि क्यों। क्या कोई इस कार्यान्वयन के साथ प्रमुख समस्याओं की व्याख्या कर सकता है। मैंने सोचा कि यह तो बहुत था, और फिर मैं पता लगा यह पूरी तरह से भयानक है :(मैं ऑनलाइन यह का एक और कार्यान्वयन पाया जाता है और यह इतना मेरा तुलना में बहुत तेज थाइरेटोस्टेनेस की मेरी चलनी इतनी धीमी क्यों है?
def generatePrimes(upperBound):
numbers = range(2,upperBound+1)
primes = []
while numbers:
prime = numbers[0]
primes.append(prime)
numbers = filter((lambda x: x%prime),numbers)
return primes
संपादित करें:।। सभी प्रश्नों के उत्तर के लिए धन्यवाद! इसका निष्कर्ष यह है कि यह फ़िल्टर है जो समस्या है क्योंकि यह प्रत्येक तत्व के माध्यम से जाता है (केवल उन लोगों के बजाय जिन्हें प्राइम के रूप में चिह्नित नहीं किया जाता है) और क्योंकि यह हर बार एक नई सूची बनाता है। इसे लूप के लिए पुराने पुराने के साथ दोबारा दोहराएं । और छानने के एक दौर है और यह बहुत तेजी से काम करता है नए कोड:
def generatePrimes(upperBound):
numbers = range(2,upperBound+1)
for i in xrange(len(numbers)):
if(numbers[i] != 0):
for j in xrange(i+numbers[i],len(numbers),numbers[i]):
numbers[j] = 0
primes = filter(lambda x: x,numbers)
return primes
यह पायथन 2 या पायथन 3 है? –
एक बात के लिए, यह एराटोस्टेनेस की चाकू नहीं है। यह [परीक्षण प्रभाग] है (http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes#Trial_division)। –
मुझे लगता है कि यह सभी – therealprashant