हां, आप कम से कम सबसे खराब केस विश्लेषण के तहत सही हैं।
ध्यान दें कि n = 2^k
के लिए, कुछ प्राकृतिक k
के लिए, आपको लगता है कि स्टॉप क्लॉज तक पहुंचने के अलावा, स्थिति हमेशा सत्य होती है, और रिकर्सिव फ़ंक्शन दो बार भाग जाएगा।
जब कि स्थापित है, यह विश्लेषण करने के लिए पर्याप्त है:
T(n) = T(n/2) + T(n/2) + X
कहाँ X
कुछ स्थिर है, (प्रत्येक पुनरावर्ती कॉल, काम की लगातार राशि लेता है, तो अन्य पुनरावर्ती कॉल की अनदेखी)।
master theorem case 1 से
, साथ:
f(n) = X
a = 2, b = 2, c = 0 (since X is in O(n^0)=O(1))
और c=0 < 1 = log_2(2)
के बाद से, मामले 1 के लिए शर्तें लागू होती हैं, और हम में समारोह T(n)
है निष्कर्ष निकाल सकते हैं Theta(n^log_2(2)) = Theta(n)
औसत मामले विश्लेषण:
औसत मामले के लिए, समान रूप से वितरित संख्या n
के साथ, द्विआधारी प्रतिनिधित्व में बिट्स का आधा इस संख्या का आयन (1) होगा, और आधा 'नीचे' (0) होगा।
2 से विभाजित के बाद से मूल रूप से गणित पारी सही है, और यदि और केवल यदि कम से कम महत्वपूर्ण बिट 0 है, इसका मतलब है इसका मतलब यह जटिलता समारोह है हालत isEven(n)
सत्य है:
T(n) = 0.5 T(n/2) + 0.5 * 2 T(n/2) + X = 0.5 * 3 * T(n/2) + X
= 1.5 * T(n/2) + X
तो
एक = 3/2, ख = 2, सी = 0
:
T(n) = 3/2 T(n/2) + X
केस 1 अभी भी (यह मानते हुए निरंतर X
) लागू होता है
यह वास्तव में सभी arithmetics O(1)
हैं मान लिया गया है:
और आप की Theta(n^log_1.5(2))~=Theta(n^0.58)
त्वरित नोट औसत मामले जटिलता मिलता है। यदि यह मामला नहीं है (बहुत बड़ी संख्या), तो आपको T(n)
की परिभाषा में निरंतर की बजाय अपनी जटिलता डालना चाहिए, और पुन: विश्लेषण करना चाहिए। इस तरह के प्रत्येक ऑपरेशन को मानना उप-रैखिक है (संख्या में, इसका प्रतिनिधित्व करने वाली बिट्स नहीं), परिणाम Theta(n)
रहता है, क्योंकि मास्टर प्रमेय के मामले 1 अभी भी लागू होते हैं। (औसत मामले के लिए, किसी भी फ़ंक्शन के लिए से बेहतर "
ध्यान दें कि आप पहला परिणाम पुन: उपयोग से दूसरे पुनरावर्ती कॉल कम कर सकते हैं। 'एक = पॉव (x, n/2); एक * ए; ' – karakfa
वापस हाँ, मुझे पता है कि आप कर सकते हैं लेकिन पुस्तक यह देखने के लिए परीक्षण कर रही थी कि क्या हम इस एल्गोरिदम की दक्षता पूछकर अवधारणा को समझ चुके हैं, क्या मैं इसे ओ (एन) कहने में सही हूं? –