Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में एक दिलचस्प समय जटिलता प्रश्न

समय की जटिलता एल्गोरिथम द्वारा अपना औसत केस चलाने के लिए आवश्यक समय के रूप में परिभाषित किया जा सकता है।

आइए कुछ बुनियादी कार्यों की समय जटिलता को देखें और उनकी गणना करें।

विधि

void counter(int n){
   for(int i = 0 ; i < n ; i++){
      for(int j = 1 ; j<n ; j += i ){
         cout<<i<<” ”<<j;
      }
      cout<<endl;
   }
}

उपरोक्त विधि i के सभी मानों के लिए n/I बार चलेगी। यानी पहले पुनरावृत्ति के लिए n बार और अंतिम पुनरावृत्ति के लिए 1 बार।

इसके अनुसार, कुल समय जटिलता है

(n/1 + n/2 + n/3 + …. + n/n)
= n (1/1 + ½ + ⅓ + …. 1/n)

अब (1/1 + ½ + ⅓ +…. 1/n) का मान O(log n) के बराबर है ।

इस कोड की समय जटिलता O(nlogn) . है ।

विधि

void counter(n){
   int i , j ;
   for(int i = 1 ; i <= n ; i++){
      for(j = 1; j <= log(i) ; j++){
         cout<<i<<” ”<<j;
      }
   }
}

फ़ंक्शन की कुल जटिलता ओ (लॉग 1) + ओ (लॉग 2) + ओ (लॉग 3) +… है। + ओ (लॉग एन) जो ओ है (लॉग एन!)।


  1. परिशोधित जटिलता

    परिशोधन विश्लेषण इस विश्लेषण का उपयोग तब किया जाता है जब कभी-कभी ऑपरेशन बहुत धीमा होता है, लेकिन अधिकांश ऑपरेशन जो बहुत बार निष्पादित होते हैं, वे तेज़ होते हैं। डेटा संरचनाओं में हमें हैश टेबल्स, डिसजॉइंट सेट्स आदि के लिए परिशोधित विश्लेषण की आवश्यकता होती है। हैश-टेबल में, अधिकांश समय खोज समय जट

  1. स्पर्शोन्मुख जटिलता

    एसिम्प्टोटिक विश्लेषण स्पर्शोन्मुख विश्लेषण का उपयोग करके, हम इनपुट आकार के आधार पर एल्गोरिथ्म के प्रदर्शन के बारे में एक विचार प्राप्त कर सकते हैं। हमें सटीक रनिंग टाइम की गणना नहीं करनी चाहिए, लेकिन हमें रनिंग टाइम और इनपुट साइज के बीच संबंध का पता लगाना चाहिए। इनपुट का आकार बढ़ने पर हमें रनिंग ट

  1. C/C++ में बर्कले का एल्गोरिथम

    बर्कले का एल्गोरिथ्म एक एल्गोरिथ्म है जिसका उपयोग वितरित प्रणालियों में घड़ी के सिंक्रनाइज़ेशन के लिए किया जाता है। इस एल्गोरिथम का उपयोग उन मामलों में किया जाता है जब वितरित नेटवर्क के कुछ या सभी सिस्टम में इनमें से कोई एक समस्या होती है - उ. मशीन के पास सटीक समय स्रोत नहीं है। B. नेटवर्क या