2015-02-17 17 views
6

मैं समय की जटिलता (बिग-ओ) कार्यों को खोजने और उचित कारण प्रदान करने का प्रयास करने की कोशिश कर रहा हूं।फ़ंक्शन की समय जटिलता

पहले समारोह जाता है:

r = 0 
# Assignment is constant time. Executed once. O(1) 
for i in range(n): 
    for j in range(i+1,n): 
     for k in range(i,j): 
      r += 1 
      # Assignment and access are O(1). Executed n^3 

इस तरह।

मुझे लगता है कि यह ट्रिपल नेस्टेड लूप है, इसलिए यह ओ (एन^3) होना चाहिए। लेकिन मुझे लगता है कि यहां मेरा तर्क बहुत कमजोर है। मैं वास्तव में नहीं मिलता है क्या यहाँ

दूसरा समारोह ट्रिपल नेस्टेड लूप के अंदर चल रहा है है:

i = n 
# Assignment is constant time. Executed once. O(1) 
while i>0: 
    k = 2 + 2 
    i = i // 2 
    # i is reduced by the equation above per iteration. 
    # so the assignment and access which are O(1) is executed 
    # log n times ?? 

मैं इस एल्गोरिथ्म पता चला हे होने के लिए (1)। लेकिन पहले फंक्शन की तरह, मुझे नहीं लगता कि समय-लूप में क्या चल रहा है।

क्या कोई फ़ंक्शंस की समय जटिलता के बारे में अच्छी तरह से समझा सकता है? धन्यवाद!

+0

नेस्टेड लूप लगभग हमेशा वर्गबद्ध होते हैं जब तक आप कुछ निरंतर काम नहीं कर रहे हैं, आपका दूसरा उदाहरण 'लॉग (एन)' है। –

+0

धन्यवाद। दूसरे उदाहरण के लिए, क्या हम i = n भाग को अनदेखा कर रहे हैं? – zakels

+0

i = n केवल एक असाइनमेंट है, उसके बाद हम प्रत्येक पुनरावृत्ति को रोक रहे हैं जैसे कि आप बायसेक्शन खोज –

उत्तर

-4

सबसे पहले, पहले कार्य के लिए, समय जटिलता ओ (एन लॉग एन) के करीब प्रतीत होती है क्योंकि प्रत्येक लूप के पैरामीटर हर बार घटते हैं।

इसके अलावा, दूसरे फ़ंक्शन के लिए, रनटाइम ओ (लॉग 2 एन) है। सिवाय, कहो मैं == एन == 2. एक रन के बाद मैं 1 है। एक के बाद मैं 0.5 है। एक और के बाद मैं 0.25 है। और इतने पर ... मुझे लगता है कि आप int (i) चाहते हैं।

प्रत्येक समारोह के लिए एक कठोर गणितीय दृष्टिकोण के लिए, आप https://www.coursera.org/course/algo पर जा सकते हैं। यह इस तरह की चीज के लिए एक अच्छा कोर्स है। मैं अपनी गणना में मैला था।

+0

'//' पायथन में पूर्णांक विभाजन – aganders3

+0

दूसरा फ़ंक्शन ओ (लॉग एन) कैसा है? क्या यह ओ (1) नहीं होना चाहिए क्योंकि निरंतर लॉगरिदमिक पर हावी है? – zakels

+0

"निरंतर लॉगरिदमिक पर हावी है"? सं। – Jasper

1

इस तरह के एक सरल मामले के लिए, आप कर सकते थे find the number of iterations of the innermost loop as a function of n exactly:

sum_(i=0)^(n-1)(sum_(j=i+1)^(n-1)(sum_(k=i)^(j-1) 1)) = 1/6 n (n^2-1) 

अर्थात, Θ(n**3) समय जटिलता (see Big Theta): यह मानता है कि r += 1 हे है (1) यदि rO(log n) अंक (model has words with log n bits)।

दूसरा पाश भी आसान है: i //= 2i >>= 1 है। nΘ(log n) अंक होते हैं और प्रत्येक यात्रा एक बाइनरी अंक (सही शिफ्ट) चला जाता है और इसलिए पूरे पाश Θ(log n) समय जटिलता है अगर हम मानते हैं कि log(n) अंकों की i >> 1 पारी हे है (1) आपरेशन (एक ही मॉडल पहले उदाहरण के रूप में)।

+0

मैंने वोल्फ्राम एल्फा चीज़ को करने और विफल होने की कोशिश की, क्या आप कदम दिखा सकते हैं? – Jasper

+0

कोई कदम नहीं हैं, लिंक पर क्लिक करें और आपको परिणाम देखना चाहिए। – jfs

+0

मैं "मैनुअल" रास्ता ढूंढ रहा हूं – Jasper

संबंधित मुद्दे