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

C++ में k सॉर्टेड सरणियों में m-वां सबसे छोटा मान ढूंढें


इस समस्या में, हमें अलग-अलग आकार की k विभिन्न सरणियां दी गई हैं। हमारा कार्य k सॉर्टेड सरणियों में m-वां सबसे छोटा मान ढूंढना है।

समस्या विवरण: यहां, हमें सभी k सरणियों के मर्ज की गई सरणी का m-वां सबसे छोटा तत्व ढूंढना है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट: m = 4

arr[][] = { {4 , 7},

                                    {2, 5, 6},

                                    {3, 9, 12, 15, 19}}

आउटपुट: 5

व्याख्या:

मर्ज की गई सॉर्टेड सरणी: 2, 3, 4, 5, 6, 7, 9, 12, 15, 19

चौथा तत्व 5 है।

समाधान दृष्टिकोण:

m-वें सबसे छोटे तत्व को खोजने का एक सरल समाधान एक मर्ज की गई सरणी बनाना और फिर सरणी को आरोही क्रम में सॉर्ट करना है जिसमें सरणी का m-वां सबसे छोटा तत्व सूचकांक (m-1) पर होगा। इस आउटपुट मान को वापस करें।

एक अधिक प्रभावी समाधान मिन हीप डेटा संरचना का उपयोग करना होगा।

इसके लिए, हम एक मिन हीप बनाएंगे और सभी सरणियों से तत्व डालेंगे। और फिर m बार हीप से न्यूनतम तत्व को हटाएंगे और आउटपुट को सरणी में संग्रहीत करेंगे। फिर अगले तत्व को हीप में डालेंगे।

m-वें हटाए गए आइटम को प्रिंट करें।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम,

उदाहरण

#include <bits/stdc++.h>
using namespace std;

typedef pair<int, pair<int, int> > ppi;

int findMSmallestElement(vector<vector<int> > sortedArr, int m) {
    priority_queue<ppi, vector<ppi>, greater<ppi> > priorQueue;
    for (int i = 0; i < sortedArr.size(); i++)
        priorQueue.push({ sortedArr[i][0], { i, 0 } });
    int count = 0;
    int i = 0, j = 0;
    while (count < m && priorQueue.empty() == false) {
        ppi curr = priorQueue.top();
        priorQueue.pop();
        i = curr.second.first;
        j = curr.second.second;
        if (j + 1 < sortedArr[i].size())
            priorQueue.push( { sortedArr[i][j + 1], { i, (j + 1) } });
        count++;
    }
    return sortedArr[i][j];
}

int main() {
    vector<vector<int> > arr{ {4 , 7},
                                 {2, 5, 6},
                                 {3, 9, 12, 15, 19}};
    int m = 6;
    cout<<m<<"th smallest value in k sorted arrays is "<<findMSmallestElement(arr, m);
    return 0;
}

आउटपुट

6th smallest value in k sorted arrays is 7

  1. - C++ प्रोग्राम: क्रमबद्ध सरणी में दिए गए मान के k निकटतम तत्व ज्ञात करना

    मान लें हमारे पास कुछ तत्वों के साथ एक सरणी A है। हमारे पास दो अन्य मान X और k हैं। हमारा कार्य सरणी A से X के k निकटतम तत्वों की संख्या ज्ञात करना है। यदि तत्व X सरणी में मौजूद है, तो यह आउटपुट में नहीं दिखाया जाएगा। यदि A = [12, 16, 22, 30, 35, 39, 42, 45, 48, 50, 53, 55, 56] और X = 35, k = 4 है।

  1. - C++ प्रोग्राम: सरणी में सबसे छोटे मान की आवृत्ति ज्ञात करना

    यहां हम देखेंगे कि सरणी में सबसे छोटे तत्व की आवृत्ति कैसे ज्ञात करें। मान लें सरणी तत्व [5, 3, 6, 9, 3, 7, 5, 8, 3, 12, 3, 10] हैं, यहां सबसे छोटा तत्व 3 है, और इस तत्व की आवृत्ति 4 है। इसलिए आउटपुट 4 है। इसे हल करने के लिए हम सूची का सबसे छोटा तत्व ज्ञात करेंगे, फिर पहले नंबर की घटनाओं को गिनेंगे

  1. - C++ में दो सॉर्ट की गई सरणियों को मर्ज करना

    समस्या कथन दो सॉर्ट की गई सरणियाँ दी गई हैं। दी गई दो सॉर्ट की गई सरणियों को एक में मर्ज करने के लिए एक फ़ंक्शन लिखें। Arr1[] = {10, 15, 17, 20} Arr2[] = {5, 9, 13, 19} Result[] = {5, 9, 10, 13, 15, 17, 19, 20} एल्गोरिदम 1. दोनों सरणियों को पार करें 1.1. यदि arr1[i] < arr2[j] 1.1.1. arr[