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

सबसेट सम समस्या


इस समस्या में, कुछ पूर्णांक तत्वों के साथ एक दिया गया सेट है। और एक और मान भी प्रदान किया गया है, हमें दिए गए सेट का एक सबसेट ढूंढना है जिसका योग दिए गए योग मान के समान हो।

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

इनपुट और आउटपुट

इनपुट: यह एल्गोरिदम संख्याओं का एक सेट, और एक योग मान लेता है। सेट: {10, 7, 5, 18, 12, 20, 15} योग मान: 35 आउटपुट: दिए गए सेट के सभी संभावित सबसेट, जहां प्रत्येक सबसेट के प्रत्येक तत्व का योग दिए गए योग मान के समान है। {10, 7, 18} {10, 5, 20} {5, 18, 12} {20, 15}

एल्गोरिदम

subsetSum(set, subset, n, subSize, total, node, sum)

इनपुट - दिया गया सेट और सबसेट, सेट और सबसेट का आकार, सबसेट का कुल, सबसेट में तत्वों की संख्या और दिया गया योग

आउटपुट - सभी संभावित सबसेट जिनका योग दिए गए योग के समान है

Begin 
  if total = sum, then 
    display the subset 
    //go for finding next subset 
    subsetSum(set, subset, , subSize-1, total-set[node], node+1, sum) 
    return 
  else 
    for all element i in the set, do 
      subset[subSize] := set[i] 
      subSetSum(set, subset, n, subSize+1, total+set[i], i+1, sum) 
    done 
End

उदाहरण

#include  using namespace std; void displaySubset(int subSet[], int size) { for(int i = 0; i < size; i++) { cout << subSet[i] << " "; } cout << endl; } void subsetSum(int set[], int subSet[], int n, int subSize, int total, int nodeCount ,int sum) { if( total == sum) { displaySubset(subSet, subSize); //print the subset subsetSum(set,subSet,n,subSize-1,total-set[nodeCount],nodeCount+1,sum); //for other subsets return; }else { for( int i = nodeCount; i < n; i++ ) { //find node along breadth subSet[subSize] = set[i]; subsetSum(set,subSet,n,subSize+1,total+set[i],i+1,sum); //do for next node in depth } } } void findSubset(int set[], int size, int sum) { int *subSet = new int[size]; //create subset array to pass parameter of subsetSum subsetSum(set, subSet, size, 0, 0, 0, sum); delete[] subSet; } int main() { int weights[] = {10, 7, 5, 18, 12, 20, 15}; int size = 7; findSubset(weights, size, 35); }

आउटपुट

10 7 18 10 5 20 5 18 12 20 15
  1. रैट इन ए मेज़ समस्या रैट इन ए मेज़ समस्या

    इस समस्या में, N x N आकार का एक दिया गया मेज़ है। स्रोत और गंतव्य स्थान क्रमशः टॉप-लेफ्ट सेल और बॉटम राइट सेल हैं। कुछ सेल मूव करने के लिए वैध हैं और कुछ सेल ब्लॉक हैं। यदि एक चूहा स्टार्ट वर्टेक्स से डेस्टिनेशन वर्टेक्स तक चलना शुरू करता है, तो हमें यह ढूंढना है कि क्या पथ पूरा करने का कोई तरीका ह

  1. - N क्वीन समस्या

    यह समस्या शतरंज बोर्ड पर N क्वीन की व्यवस्था ढूंढने की है, जैसे कि कोई क्वीन बोर्ड पर किसी अन्य क्वीन पर हमला न कर सके। शतरंज क्वीन किसी भी दिशा में हमला कर सकती है जैसे क्षैतिज, लंबवत, क्षैतिज और विकर्ण तरीके से। एक बाइनरी मैट्रिक्स का उपयोग N क्वीन की स्थितियों को प्रदर्शित करने के लिए किया जाता

  1. M-कलरिंग समस्या M-कलरिंग समस्या

    इस समस्या में, एक अनडायरेक्टेड ग्राफ दिया गया है। m रंग भी प्रदान किए गए हैं। समस्या यह ढूंढना है कि क्या नोड्स को m अलग-अलग रंगों के साथ असाइन करना संभव है, जैसे कि ग्राफ के कोई दो आसन्न वर्टेक्स एक ही रंग के न हों। यदि समाधान मौजूद है, तो प्रदर्शित करें कि कौन सा रंग किस वर्टेक्स पर असाइन किया गय