2011-05-23 17 views
5

यह सवाल एक अतीत परीक्षा कागज मैं सिर्फ यह जानना चाहते हैं मैं सही रास्तेसमय जटिलता

1. int i=1; 
2. while (i <= n) { 
3. for (int j=1; j<10; j++) 
4.  sum++; 
5. i++; 
6. } 
7. for(int j = 1; j <= n; j++) 
8. for(int k = 1; k <= n; k=k*2) 
9.  sum++; 

1.) कितनी बार बयान 4 निष्पादित किया जाता है पर हूँ चाहता हूँ से संशोधन उद्देश्यों के लिए है?
ए हे (एन)
बी O (n^2)
सी हे (लॉग एन)
डी O (n n लॉग इन करें) ऊपर

यहाँ मैं की
ई कोई भी ए

2.) स्टेटमेंट 9 कितनी बार निष्पादित किया गया है?
ए हे (एन)
बी O (n^2)
सी हे (लॉग एन)
डी O (n n लॉग इन करें) ऊपर

लाइन की वजह से

की
ई कोई भी 8 (के = के * 2) मैंने सी

3.) पूरे कोड खंड का चलने का समय क्या है?
ए हे (एन)
बी O (n^2)
सी हे (लॉग एन)
डी O (n लॉग इन करें n)

के बाद से हे (एन) + O (logn) = ओ (एन) इसलिए मैंने एक

+0

@Neil: आपको ऐसा क्यों लगता है? (संभवतः यह निश्चित रूप से परीक्षा पत्र की पूरी नहीं है।) – ShreevatsaR

+2

@ श्रीवत्सरा: शायद क्योंकि बड़ा-ओ न तो मात्रा है ("कितनी बार है ...?") न ही एक अवधि ("चलने का समय क्या है का ...?")। बहुत बेहतर होगा "समय की जटिलता क्या है?"। – paxdiablo

+3

@paxdiablo: यह कहना बिल्कुल सही है कि "समय कथन 4 की संख्या निष्पादित की गई है ओ (एन)"। यही है, मात्रा/कार्य 10 एन ओ (एन) है। (एक पूरी तरह से अलग बात यह है कि शायद पेपर को थेटा के लिए पूछा जाना चाहिए था, या छोटे से सही ओ (।) के लिए कहा था, लेकिन यह पाठ्यक्रम के स्तर के आधार पर क्षमा करने योग्य है।) – ShreevatsaR

उत्तर

13

आपका उत्तर 1 सही है, यह केवल n द्वारा नियंत्रित लूप के अंदर है।

उत्तर 2 गलत है। यह O(log n) होगा यदि लाइन 7 मौजूद नहीं था, क्योंकि लाइन 7 n पर निर्भर कई बार चलाने के लिए लाइन 8 और 9 को मजबूर कर रही है, तो उत्तर O(n log n) है।

उत्तर 3 सही तर्क है लेकिन वास्तविक उत्तर 2 से पीड़ित है। O(n) + O(n log n)O(n log n) तक आसान बनाता है।

तो उत्तर A, D और D हैं।

+0

@ एनीटा: अगर इस उत्तर ने आपकी मदद की है, तो आप इसके बगल में टिक चिह्न पर क्लिक करके इसे "स्वीकार" कर सकते हैं। – ShreevatsaR

+0

लाइन के तहत टिप्पणियां गलत हैं। बिग-ओ समय के बारे में कुछ भी नहीं कहता है; यह आमतौर पर कुछ विशिष्ट संचालन के संदर्भ में एसिम्प्टोटिक जटिलता निर्दिष्ट करता है। उस अर्थ में, यह रनटाइम से जुड़ी किसी भी चीज के मुकाबले "कोड का एक टुकड़ा कितना बार चलाया जाता है" के करीब है (जो स्थानीयता जैसी चीजों पर भी निर्भर करता है --- बड़े-ओ हमेशा मानते हैं कि कोई भी ऑपरेशन निरंतर समय है, जहां क्योंकि स्मृति पहुंच कैश के आधार पर बहुत भिन्न होती है)। –

+1

@ जेम्स, समयबद्धता के लिए "चिपकने वाला" यह स्पष्ट करता है कि हम यहां समय के बारे में बात कर रहे हैं। – paxdiablo

2

मुझे नहीं पता कि प्रश्न कहां तैयार किए गए हैं, लेकिन यदि शब्द आपके जैसा कहता है, तो आपके परीक्षक को बड़े ओ की सही परिभाषा नहीं पता था (कम से कम जब वह "सही" उत्तरों की अपेक्षा करता है) - "बिग ओ फ़ंक्शन" छोटे शामिल करें "। तो कुछ जो f (n) = 10 n में n के फ़ंक्शन के रूप में निष्पादित करता है जो रैखिक है ओ (एन), ओ (एन^2), ओ (एन लॉग एन) में भी है। एक "छोटी से छोटी" संभव लिए पूछता है, अपने जवाब

  1. इसलिए वक्तव्य 4 निष्पादित किया जाता है 10 n बार है, तो एक
  2. वक्तव्य 9 निष्पादित किया जाता है n * लोग इन n बार, डी
  3. यहाँ होगा इसे दोनों के योग को निष्पादित किया जाता है, एन + एन * लॉग एन इसलिए (यहां आप एक * एन खो गए हैं), इसलिए डी सही होगा।

तो अगर एकाधिक जवाब संभव थे और यह सिर्फ यह कितना क्रियान्वित किया जाता है के लिए कहा गया था, सही जवाब होगा

  1. ए, बी, डी
  2. बी, डी
  3. बी , डी
+0

* एन * लॉग * एन * प्रश्न 2 में उत्तर डी है, सी नहीं। –

+0

हाँ पहले ही इसे ठीक कर दिया है, प्रश्नों में पत्र को गलत तरीके से पढ़ा है। – flolo

+0

प्रत्येक ट्यूटर और परीक्षक जो मैंने हमेशा से मुलाकात की है, उसका मतलब है * सबसे छोटा सही * बड़ा-ओ जब उन्होंने किसी चीज के बड़े-ओ के बारे में बात की/पूछा, जब तक उन्हें संपत्ति का उपयोग करने की आवश्यकता न हो कि यदि कार्य ओ (कुछ) है तो यह भी है हे (कुछ बड़ा)। –

1

उत्तर 1: यानी। ओ (एन) कथन 4 के रूप में 10 * एन बार निष्पादित किया जाएगा।

उत्तर 2: डी यानी। ओ (एनएलओएल (एन)) कथन 9 के रूप में एन * लॉग (एन) बार निष्पादित किया जाएगा।

उत्तर 3: डी समग्र जटिलता के रूप में [ओ (एन) + ओ (एनएलओएल (एन))] एन * लॉग (एन) होगा।

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