DAA - इष्टतम मर्ज पैटर्न
किसी एकल सॉर्ट की गई फ़ाइल में विभिन्न लंबाई की सॉर्ट की गई फ़ाइलों का एक सेट मर्ज करें। हमें एक इष्टतम समाधान खोजने की आवश्यकता है, जहां परिणामी फ़ाइल न्यूनतम समय में उत्पन्न हो जाएगी।
यदि सॉर्ट की गई फ़ाइलों की संख्या दी गई है, तो उन्हें एक ही सॉर्ट की गई फ़ाइल में मर्ज करने के कई तरीके हैं। यह मर्ज जोड़ी वार किया जा सकता है। इसलिए, इस प्रकार के विलय को कहा जाता है2-way merge patterns।
के रूप में, अलग-अलग युग्मन के लिए अलग-अलग समय की आवश्यकता होती है, इस रणनीति में हम कई फाइलों को एक साथ विलय करने का एक इष्टतम तरीका निर्धारित करना चाहते हैं। प्रत्येक चरण पर, दो सबसे छोटे अनुक्रम मर्ज किए जाते हैं।
विलय करने के लिए a p-record file और एक q-record file संभवतः की आवश्यकता है p + q रिकॉर्ड चाल, स्पष्ट पसंद, प्रत्येक चरण में दो छोटी फ़ाइलों को एक साथ मर्ज करें।
द्वि-मर्ज पैटर्न को बाइनरी मर्ज ट्री द्वारा दर्शाया जा सकता है। आइए हम एक सेट पर विचार करेंn छँटाई हुई फाइलें {f1, f2, f3, …, fn}। प्रारंभ में, इसके प्रत्येक तत्व को एकल नोड बाइनरी ट्री माना जाता है। इस इष्टतम समाधान को खोजने के लिए, निम्नलिखित एल्गोरिथ्म का उपयोग किया जाता है।
Algorithm: TREE (n)
for i := 1 to n – 1 do
declare new node
node.leftchild := least (list)
node.rightchild := least (list)
node.weight) := ((node.leftchild).weight) + ((node.rightchild).weight)
insert (list, node);
return least (list);
इस एल्गोरिथ्म के अंत में, रूट नोड का वजन इष्टतम लागत का प्रतिनिधित्व करता है।
उदाहरण
आइए दिए गए फाइलों पर विचार करें, क्रमशः f , 1 , f 2 , f 3 , f 4 और f 5 के साथ क्रमशः 20, 30, 10, 5 और 30 संख्या।
यदि प्रदान किए गए अनुक्रम के अनुसार मर्ज संचालन किया जाता है, तो
M1 = merge f1 and f2 => 20 + 30 = 50
M2 = merge M1 and f3 => 50 + 10 = 60
M3 = merge M2 and f4 => 60 + 5 = 65
M4 = merge M3 and f5 => 65 + 30 = 95
इसलिए, संचालन की कुल संख्या है
50 + 60 + 65 + 95 = 270
अब, सवाल उठता है कि क्या कोई बेहतर उपाय है?
बढ़ते क्रम में उनके आकार के अनुसार संख्याओं को क्रमबद्ध करने पर, हमें निम्नलिखित अनुक्रम मिलते हैं -
f4, f3, f1, f2, f5
इसलिए, इस अनुक्रम पर मर्ज संचालन किया जा सकता है
M1 = merge f4 and f3 => 5 + 10 = 15
M2 = merge M1 and f1 => 15 + 20 = 35
M3 = merge M2 and f2 => 35 + 30 = 65
M4 = merge M3 and f5 => 65 + 30 = 95
इसलिए, संचालन की कुल संख्या है
15 + 35 + 65 + 95 = 210
जाहिर है, यह पिछले वाले से बेहतर है।
इस संदर्भ में, अब हम इस एल्गोरिथ्म का उपयोग करके समस्या को हल करने जा रहे हैं।
प्रारंभिक सेट
चरण 1
चरण 2
चरण 3
चरण 4
इसलिए, समाधान 15 + 35 + 60 + 95 = 205 संख्याओं की तुलना करता है।