2010-06-06 13 views
6
public void foo(int n, int m) { 
    int i = m; 

    while (i > 100) { 
     i = i/3; 
    } 
    for (int k = i ; k >= 0; k--) { 
     for (int j = 1; j < n; j *= 2) { 
      System.out.print(k + "\t" + j); 
     } 
     System.out.println(); 
    } 
} 

मुझे लगा कि जटिलता ओ (लॉगन) होगी।
यह आंतरिक पाश के उत्पाद के रूप में है, बाहरी पाश - कभी 100 से अधिक बार निष्पादित नहीं किया जाएगा, इसलिए इसे छोड़ा जा सकता है।ट्रिकी बिग-ओ जटिलता

मुझे यकीन है कि समय के बारे में मुझे यकीन नहीं है, क्या इसे बिग-ओ जटिलता में शामिल किया जाना चाहिए? बहुत बड़े i मानों के लिए यह एक प्रभाव, या अंकगणितीय परिचालन कर सकता है, इससे कोई फर्क नहीं पड़ता कि किस पैमाने पर, बुनियादी परिचालन के रूप में गिनती है और छोड़ा जा सकता है?

+4

+1 आधार पर लॉग इन करने के लिए संदर्भित करता है है! –

+2

जबकि समय गिना जाता है - यह ओ (लॉग एम) –

उत्तर

11

while पाश O(log m) है, क्योंकि आप 3 द्वारा m विभाजित रखना जब तक यह नीचे है या 100 के बराबर।

चूंकि 100 आपके मामले में स्थिर है, इसे अनदेखा किया जा सकता है, हां।

आंतरिक लूप O(log n) जैसा आपने कहा था, क्योंकि 2 से n से अधिक होने तक गुणा करें।

इसलिए कुल जटिलता O(log n + log m) है।

या अंकगणितीय परिचालन, इससे कोई फर्क नहीं पड़ता कि बुनियादी परिचालन के रूप में गिनती है और इसे छोड़ा जा सकता है?

अंकगणितीय परिचालन आमतौर पर छोड़ा जा सकता है, हां। हालांकि, यह भी भाषा पर निर्भर करता है। यह जावा जैसा दिखता है और ऐसा लगता है कि आप आदिम प्रकार का उपयोग कर रहे हैं। इस मामले में अंकगणितीय परिचालन O(1) पर विचार करना ठीक है, हां। लेकिन यदि आप उदाहरण के लिए बड़े पूर्णांक का उपयोग करते हैं, तो यह वास्तव में ठीक नहीं है, क्योंकि अतिरिक्त और गुणा अब O(1) नहीं है।

+0

+1 ग्रेग्स की तुलना में अधिक विस्तृत उत्तर है :) – Sekhat

+1

@ सेखत: सहमत हुए, मैंने उन्हें +1 भी दिया :) –

5

जटिलता ओ है (लॉग एम + लॉग एन)।

जबकि लूप लॉग 3 (एम) बार निष्पादित करता है - स्थिर (लॉग 3 (100))। लूप के लिए बाहरी निरंतर संख्या (लगभग 100) निष्पादित करता है, और आंतरिक पाश लॉग 2 (एन) बार निष्पादित करता है।

2

जबकि पाश 3 का एक पहलू से मीटर के मूल्य (बेस 3) मीटर

इसलिए इस तरह के आपरेशनों की संख्या लॉग इन करने के लिए किया जाएगा छोरों के लिए आप 2 के रूप में संचालन की संख्या के बारे में सोच सकता है बांटता summations -

योग (k = 0 मैं करने के लिए) [योग (जे = 0 LG n करने के लिए) (1)] योग (k = 0 मैं करने के लिए) [एलजी n + 1] (एलजी n + 1) (i + 1) संचालन की कुल संख्या होगी, जिसमें से लॉग टर्म हावी है।

इसलिए जटिलता हे (लॉग (base3) मीटर + एलजी एन) यहाँ एलजी यह होमवर्क टैगिंग और ईमानदार होने के लिए 2

+0

क्या आप कृपया बताएं कि ओ क्यों जोड़ रहे हैं (लॉग (बेस 3) एम + एलजी एन) क्यों वे गुणा नहीं हो रहे हैं? –

+0

मेरे अनुसार यह लॉग (बेस 3) एम + होना चाहिए (लॉग (बेस 3) एम * एलजी एन) –

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