2014-11-18 9 views
11

मैं तुलना करने के लिए सरल एल्गोरिदम लिख रहा हूं कि दो वैक्टर ए 1 और ए 2 पूर्णांक एनाग्राम हैं (वे अलग-अलग ऑर्डर में समान तत्व होते हैं)। उदाहरण के लिए {2,3,1} और {3,2,1} आरेख हैं, {1,2,2} और {2,1,1} नहीं हैं।एल्गोरिदम बनाम सैद्धांतिक चलने वाले समय कार्यों के प्रयोगात्मक चलने वाले समय की तुलना

यहाँ मेरी एल्गोरिथ्म है (यह बहुत आसान है):

1. for (i = 1; i <= a1.length; i++) 
1.1. j = i 
1.2. while (a1[i] != a2[j]) 
    1.2.1. if (j >= a1.length) 
    1.2.1.1. return false 
    1.2.2. j++ 
1.3. tmp = a2[j] 
1.4. a2[j] = a2[i] 
1.5. a2[i] = tmp 
2. return true 

दो विपर्यय की तुलना का प्रतिनिधित्व: enter image description here

समय चल रहा है के समारोह पर विचार वेक्टर पर निर्भर आकार टी (एन) जब वे कर रहे हैं की सुविधा देता है दो परिस्थितियों में एनाग्राम: पेसिमिस्टिक और औसत।

  • निराशावादी

होता है वैक्टर डुप्लिकेट तत्व नहीं कब और वैक्टर रिवर्स आदेश में हैं।

enter image description here

सी 3 में बहुलता, सी 4 और C6 हैं:

enter image description here

तो pesimistic प्रसारण समय के लिए अंतिम समारोह है: enter image description here

समीकरण (3) लिखा जा सकता है एक सरल रूप में: enter image description here

  • औसत

होता है वैक्टर डुप्लिकेट तत्व नहीं कब और वैक्टर यादृच्छिक आदेश में हैं। यहां गंभीर धारणा यह है कि: औसतन हम ए 1 से क्रमशः ए 1 से संबंधित तत्व पाते हैं (2/सी 3, सी 4 और सी 6 में जे/2)।

enter image description here

सी 3 में बहुलता, सी 4 और C6 हैं: enter image description here

औसत चल रहा है समय के लिए

अंतिम समारोह है: enter image description here

सरल रूप में लिखा: enter image description here


यहाँ मेरी अंतिम निष्कर्ष और सवाल यह है: समीकरण में

b2 (8) (4) enter image description here

मैं अधिकार के साथ हूँ समीकरण में a2 दो बार से छोटा होता है (9)?

मैंने सोचा था कि वेक्टर आकार के समारोह में एल्गोरिथ्म का चलने का समय की साजिश रचने जो कर सकते हैं सबूत समीकरण (9), लेकिन यह नहीं बताया गया है: enter image description here

भूखंड हम देख सकते हैं कि अनुपात a2/b2 1.11 है पर, में पसंद नहीं समीकरण (9) कहां है 2. उपरोक्त साजिश में अनुपात भविष्यवाणी से बहुत दूर है। वह क्यों है?

+0

@StackFlowed यह एक प्रश्न जैसा प्रतीत होता है। एक बहुत अच्छी तरह लिखित एक। – chbaker0

+0

@Everettss मुझे लगता है कि आपकी समस्या आपकी धारणा है: "औसतन हम ए 1 से क्रमशः ए 1 से संबंधित तत्व पाते हैं।" यह धारणा कहां से आती है? – chbaker0

+0

@mebob मैंने इस धारणा को अच्छी तरह से ज्ञात पुस्तक में एल्गोरिदम/थॉमस एच। कॉर्मन परिचय http://www.ime.usp.br/~geiser/courses/MAC5711%20-%20An%C3% A1lise% 20de% 20Algoritmos/परिचय% 20to% 20 एल्गोरिदम% 20 (प्रशिक्षक का% 20 मैनुअल) .pdf आप इसे पेज 11 पर और 18 पृष्ठ पर एक ही धारणा पर पा सकते हैं: "⇒ औसतन, जबकि लूप को सॉर्ट किए गए माध्यम से आधा रास्ते देखना पड़ता है subarray ए [1। जे - 1] यह तय करने के लिए कि कुंजी कहां छोड़ें। ⇒ tj = j/2। " मैं इसे प्रयोगात्मक रूप से भी मापता हूं। यह आधे रास्ते में है। मैंने इसका उल्लेख नहीं किया: मैं प्रत्येक बिंदु को 100 बार साजिश पर मापता हूं। – Everettss

उत्तर

1

मुझे मेरी समस्या मिली!

ऐसा नहीं था जैसा कि मैंने औसत मामले के लिए धारणा में सोचा था: "हम ए 1 (जे/2) सॉर्ट नहीं किए गए आधे में से 1 से संबंधित तत्व पाते हैं। यह निराशावादी मामले में छिपा था।

उचित निराशावादी परिदृश्य तब होता है जब वेक्टर ए 2 उसी क्रम में होता है जैसे पहले तत्व को अंत में स्थानांतरित किया जाता है। उदाहरण के लिए:

a1 = {1,2,3,4,5}

a2 = {2,3,4,5,1}

मैं मापा प्रयोगात्मक एक बार फिर से के समय से चल रहा है निराशावादी मामले के लिए नई धारणा के साथ मेरा एल्गोरिदम। यहाँ परिणाम हैं:

enter image description here

अंत में प्रयोगात्मक अनुपात के लिए a2/बी 2 है: 2.03 +/- 0,09

और यह मेरी सैद्धांतिक कार्यों के लिए सबूत है।

मेरे साथ रहने और मेरी छोटी गलती को हल करने की कोशिश करने के लिए आप सभी के लिए धन्यवाद!

0

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

यादृच्छिक क्रम के मामले में, शाखाओं की भविष्यवाणी करना कठिन होगा और इसलिए आपकी शाखा निर्देशों को निष्पादित करने में अधिक समय लगेगा। यह आसानी से आप देख सकते हैं कि अंतर

+0

सभी मापों के लिए मैंने इसे 100 बार दोहराया। और प्लॉट्स पर आप जो भी मूल्य डाल सकते हैं वह औसत हैं। तो मैं इसे औसत पर माप और भविष्यवाणी कर सकता हूं। – Everettss

+0

एवरेट्स, मेरी टिप्पणी रन-टाइम की भविष्यवाणी करने की आपकी क्षमता के बारे में नहीं थी, लेकिन माइक्रोप्रोसेसर की भविष्यवाणी करने की क्षमता किस तरह से एक शाखा (उदाहरण के लिए, कंडिशन) जाएगी। इस कार्यक्रम पर कितना तेज़ चल सकता है इस पर बहुत महत्वपूर्ण प्रभाव पड़ता है। आप यहां इसके बारे में पढ़ सकते हैं: http://en.wikipedia.org/wiki/Branch_predictor –

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