एराटोस्थनीज एल्गोरिथ्म की छलनी की समय जटिलता


95

से विकिपीडिया:

एल्गोरिथ्म की जटिलता O(n(logn)(loglogn))बिट संचालन है।

आप उस पर कैसे पहुंचे?

इस जटिलता में यह loglognशब्द शामिल है कि मुझे बताता है कि sqrt(n)कहीं है।


मान लीजिए कि मैं पहले 100 नंबरों ( n = 100) पर छलनी चला रहा हूं , यह मानते हुए कि संख्याओं को समग्र रूप से चिह्नित करने में निरंतर समय लगता है (सरणी कार्यान्वयन), हमारे द्वारा उपयोग की जाने वाली संख्या mark_composite()कुछ इस तरह होगी

n/2 + n/3 + n/5 + n/7 + ... + n/97        =      O(n^2)                         

और अगले प्राइम नंबर को खोजने के लिए (उदाहरण के लिए 7सभी संख्याओं के गुणकों को पार करने के बाद कूदने के लिए 5), संचालन की संख्या होगी O(n)

तो, जटिलता होगी O(n^3)क्या आप सहमत हैं?


5
मैं बाकी के बारे में नहीं जानता (अभी मेरे बहुत नींद वाले मस्तिष्क के लिए भी मैथी), लेकिन वर्गमूल इस तथ्य से उपजा है कि अगर किसी संख्या में कोई विभाजक कम नहीं है, तो इसका वर्गमूल, यह प्रमुख है। इसके अलावा, मैंने अभी सीखा है कि loglog (n) का मतलब है कि एक वर्गमूल है। अच्छा लगा।
आर। मार्टिनो फर्नांडीस

13
कैसे वहाँ loglog (n) होने का मतलब है कि कहीं sq sq (n) है? (@Martinho: आप यह क्यों कहते हैं कि "आपने इसे सीखा है"?) वास्तविक विश्लेषण में कोई वर्गमूल शामिल नहीं है!
श्रीवत्सआर

जवाबों:


117
  1. आपका n / 2 + n / 3 + n / 5 +… n / 97 O (n) नहीं है, क्योंकि शब्दों की संख्या स्थिर नहीं है। [अपने संपादन के बाद संपादित करें: O (n 2 ) एक ऊपरी बाउंड ढीला है।] एक ढीला ऊपरी-बाउंड n (1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 +… है) 1 / n) (n तक सभी संख्याओं के पारस्परिक योग ), जो O (n log n) है: हार्मोनिक संख्या देखें । एक अधिक उचित ऊपरी-बाउंड n (1/2 + 1/3 + 1/5 + 1/7 +…) है, जो कि n, जो कि O (n log log n) है, के अपराधों के पारस्परिक योग का योग है। ( यहां या यहां देखें )

  2. "अगले प्रधानमंत्री नंबर मिल" बिट केवल हे (एन) है कुल मिलाकर, परिशोधित - आप आगे बढ़ने के अगले संख्या को खोजने के लिए केवल n में बार कुल , प्रत्येक चरण में नहीं। इसलिए एल्गोरिथम का यह पूरा हिस्सा केवल O (n) लेता है।

तो इन दोनों का उपयोग करके आपको O (n log log n) + O (n) = O (n log log n) अंकगणित संचालन की ऊपरी सीमा मिलती है। यदि आप बिट ऑपरेशंस की गिनती करते हैं, चूंकि आप n से ऊपर की संख्या के साथ काम कर रहे हैं, तो उनके पास लॉग एन बिट्स है, जो कि लॉग एन का कारक है, जिसमें ओ (एन लॉग एन लॉग लॉग एन) बिट संचालन दिया जाता है।


समस्या के एक हिस्से के लिए, आप असममित जटिलता पर विचार कर रहे हैं। दूसरे भाग के लिए, आप परिमित संकलन पर विचार कर रहे हैं। मैं उलझन में हूं।
कुर्रोन

2
@ क्रिश्रॉन क्या समस्या है? यह मामला नहीं है कि "विषमतात्मक जटिलता" और "परिशोधित जटिलता" एक ही चीज के दो अलग-अलग प्रकार हैं। परिशोधन केवल कुछ ध्यान से गिनने के लिए एक तकनीक है, जो कि असममित जटिलता हो सकती है।
श्रीवत्सआर

यह सब तब जबकि मैं उन्हें अलग समझता था। इसे स्पष्ट करने के लिए धन्यवाद।
कुर्रोन

1
@ श्रीवत्सआर हम हार्मोनिक श्रृंखला के योग की गणना एन शब्दों तक क्यों करते हैं। क्या हमें sqrt (n) शब्दों तक की गणना नहीं करनी चाहिए? उत्तर को थीटा के रूप में देते हुए (loglogsqrt (n)) अंकगणितीय संचालन? इसके अलावा, विकिपीडिया का कहना है कि अंतरिक्ष जटिलता O (n) है। क्या ऐसा नहीं होना चाहिए क्योंकि n को किसी भी मामले में n तत्वों की एक सरणी की आवश्यकता है?
a_123

@ s_123 हां आप केवल termsn शब्दों तक की गणना कर सकते हैं, लेकिन यह एसिम्प्टोटिक विश्लेषण (या यहां तक ​​कि चल रहे समय में एक महत्वपूर्ण व्यावहारिक अंतर) से कोई फर्क नहीं पड़ता, क्योंकि लॉग (√x) = (1/2) किसी भी x के लिए लॉग इन करें। तो So (एन लॉग लॉग )n) = n (एन लॉग लॉग एन)। आपके अन्य प्रश्न के लिए, हाँ स्थान की जटिलता n (n) है, जो O (n) भी है: यह इंगित करने के लिए O () का उपयोग करना पारंपरिक है कि आप इंगित करने के लिए saying () के बजाय ऊपरी सीमा निर्दिष्ट कर रहे हैं। यह निचली सीमा है और साथ ही (विशेषकर जब निचली सीमा स्पष्ट है, जैसा कि यहाँ है)।
श्रीवत्सआर

7

यह जटिलता शामिल है कि लॉगलॉग शब्द मुझे बताता है कि कहीं एक sqrt (n) है।

इस बात का ध्यान रखें कि जब आप Pसोते समय एक प्रमुख संख्या पाते हैं , तो आप अपनी वर्तमान स्थिति में संख्याओं को पार करना शुरू नहीं करते हैं + P; आप वास्तव में संख्याओं को पार करना शुरू करते हैं P^2। पिछले प्राइम नंबरों Pसे कम के सभी गुणकों P^2को पार कर लिया गया होगा।


10
यह कथन अपने आप में सत्य है, लेकिन उद्धृत कथन पर इसका कोई असर नहीं है, जिसका अपना कोई गुण नहीं है। चाहे हम शुरू करें pया p^2, जटिलता समान है (सीधी पहुंच सरणियों के साथ)। SUM (1/p) {p<N} ~ log (log N)कारण है।
विल नेस

6
  1. आंतरिक लूप n/iकदम उठाता है, जहां iप्राइम => पूरी जटिलता है sum(n/i) = n * sum(1/i)। प्राइम हार्मोनिक श्रृंखला के अनुसार, प्राइम sum (1/i)कहां iहै log (log n)। कुल में, O(n*log(log n))
  2. मुझे लगता है कि ऊपरी लूप को समग्र समय जटिलता के nसाथ बदलकर अनुकूलित किया जा सकता है :sqrt(n)O(sqrt(n)loglog(n))

    void isprime(int n)
    {
        int prime[n],i,j,count1=0;
        for(i=0;i<n;i++)
        {
           prime[i]=1;
        }
        prime[0]=prime[1]=0;
        for(i=2;i<=n;i++)
        {
            if(prime[i]==1)
            {
                printf("%d ",i);
                for(j=2;(i*j)<=n;j++)
                    prime[i*j]=0;
            }
        }    
    }
    

2
नहीं, sqrt (n) के साथ n की जगह यह ~ n लॉग लॉग (sqrt n) बनाता है जो अभी भी ~ n लॉग लॉग n है। और isprimeवहाँ उपयोग करने के लिए बिल्कुल गलत नाम है।
नेस

-1

उपरोक्त विवरण देखें कि आंतरिक लूप sqrt (n) तक सभी अभाज्य संख्याओं का हार्मोनिक योग है। तो, O (sqrt (n) * लॉग (लॉग (sqrt (n))) की वास्तविक जटिलता है)


2
गलत। हम N: N / 2 + N / 3 + N / 5 + N / 7 + N / 11 + ... = N (1/2 + 1/3 + 1/5 + 1/7) को सभी तरह से चिह्नित करते हैं। + 1/11 + ...) ~ एन लॉग लॉग (sqrt एन) ~ एन लॉग लॉग एन।
विल नेस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.