बबल सॉर्ट में स्वैप की अपेक्षित संख्या


14

पूर्णांकों की एक सरणी को देखते हुए, सरणी के प्रत्येक तत्व को एक निश्चित संख्या द्वारा कुछ प्रायिकता , साथ बढ़ाया जा सकता है । मुझे स्वैप की अपेक्षित संख्या का पता लगाना है जो बुलबुला सॉर्ट का उपयोग करके सरणी को सॉर्ट करने के लिए होगा ।एन बी पी [ मैं ] 0 मैं < nANbp[i]0i<n

मैंने निम्नलिखित कोशिश की है:

  1. लिए एक तत्व लिए संभाव्यता की गणना दी गई संभावनाओं से आसानी से की जा सकती है।i < jA[i]>A[j]i<j

  2. उपरोक्त का उपयोग करते हुए, मैंने स्वैप की अपेक्षित संख्या की गणना इस प्रकार की है:

    double ans = 0.0;
    for ( int i = 0; i < N-1; i++ ){
        for ( int j = i+1; j < N; j++ ) {
            ans += get_prob(A[i], A[j]); // Computes the probability of A[i]>A[j] for i < j.
    

मूल रूप से मुझे यह विचार आया क्योंकि स्वैप की अपेक्षित संख्या की गणना सरणी के व्युत्क्रमों की संख्या से की जा सकती है। इसलिए दी गई प्रायिकता का उपयोग करके मैं गणना कर रहा हूं कि क्या नंबर को नंबर साथ स्वैप किया जाएगा ।[ जे ]A[i]A[j]

ध्यान दें कि प्रारंभिक सरणी तत्व किसी भी क्रम में, सॉर्ट या अनसोल्ड हो सकते हैं। फिर प्रत्येक संख्या कुछ संभावना के साथ बदल सकती है। इसके बाद मुझे स्वैप की अपेक्षित संख्या की गणना करनी होगी।

मैंने पहले भी इसी तरह का सवाल पोस्ट किया है, लेकिन इसमें तमाम अड़चनें नहीं थीं।

मुझे इस बात पर कोई अच्छा संकेत नहीं मिला कि मैं सही रास्ते पर हूं या नहीं, इसलिए मैंने यहां सभी बाधाओं को सूचीबद्ध किया। कृपया मुझे कुछ संकेत दें यदि मैं गलत तरीके से समस्या के बारे में सोच रहा हूं।


6
टाइटल में क्यूट टफू, हालांकि।
जेफ

क्या आपका मतलब यह नहीं है कि एन पूर्णांकों का एक क्रमबद्ध सरणी दें , प्रत्येक तत्व ... प्रारंभिक सरणी में संख्याओं की सीमा और उनके बीच के अंतर, बी के सापेक्ष गायब प्रतीत हो रहे हैं।
डैनी वारोड

ध्यान रखें कि इस तरह के विश्लेषण के लिए, आपको बहुत स्पष्ट करना होगा कि विशेष रूप से "कार्यान्वयन" क्या है यदि आप बुलबुले विचार करते हैं। यह सबसे अच्छा होगा यदि आपने छद्म कोड में एल्गोरिथ्म दिया।
राफेल

यह समस्या codechef साइट codechef.com/JULY12/problems/LEBOBBLE पर चल रही प्रतियोगिता से है, मैं प्रतियोगिता के बाद अपने दृष्टिकोण को पोस्ट करके खुश हूँ।
रिजवानहुड

जवाबों:


11

Let को निम्नलिखित के रूप में परिभाषित किया जाना चाहिए:बीयूएलएसआरटी

for (j = A.length; j > 1; j--)
    for (i = 0; i < j - 1; i++)
        if (A[i] > A[i + 1])
            swap(i, i + 1, A)

कुछ परिवर्तन को देखते हुए , एक उलट हुआ है कहा जाता है कि अगर कुछ के लिएहम देखते हैं कि प्रत्येक जोड़ी के लिए एक व्युत्क्रम जांच करता है, और यदि ऐसा है, तो एक स्वैप करता है। देंएक्स1,,एक्सnएक्सजे<एक्समैंमैं<जेबीयूएलएसआरटीएक्सएक्स=(n2)एक्सबीयूएलएसआरटी

एक्स=ΣजेΣमैं<जेमैंमैंजेमैंमैंजे(मैं,जे)[एक्स]=[ΣजेΣमैं<जेमैंमैंजे]=ΣजेΣमैं<जे[मैंमैंजे]पी{मैंमैंजे}

पी{मैंमैंजे}=12एक्सजे<एक्समैंएक्समैं<एक्सजेमैंजे

[एक्स]=ΣजेΣमैं<जे[मैंमैंजे]=ΣजेΣमैं<जे12=(n2)12=n(n-1)4

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.