मैं दो पदानुक्रमित संरचनाओं को सिंक्रनाइज़ करने के लिए एक एल्गोरिदम लिखने की उम्मीद कर रहा हूं। ये संरचना ऑब्जेक्ट ग्राफ़, रिलेशनल डेटाबेस टेबल आदि में संग्रहीत डेटा हो सकती है (यहां तक कि दो अलग-अलग संरचनाएं, जब तक उनके तुलनात्मक कुंजी हों)। सिंक्रनाइज़ेशन एक तरफ होगा, यानी, एक संरचना प्रोटोटाइप होगी, और दूसरा मिलान करने के लिए संशोधित किया जाएगा।दो पदानुक्रमों की एक तरफा सिंक
मान लें कि हमारे पास sync
फ़ंक्शन है। प्रोटोटाइप
objB
- - वस्तुkeyA
संशोधित किया जा करने के लिए - के लिए objA
keyB
कुंजी पैदा समारोह - कुंजी पैदा समारोह
objA
: यह निम्न को स्वीकार करने की आवश्यकता होगीobjB
addB
-objB
बनाने के लिए फ़ंक्शन (नएobjB
की वापसी आईडी)setB
- अद्यतन करने के लिए समारोहobjB
remB
- नष्ट करने के लिए समारोह एकobjB
parB
- इस संदर्भ के लिएaddB
को पारित कर दिया है
तो हम है - objB
के माता पिता की आईडी यह:
let sync (objA:'a) (objB:'b) (keyA:'a -> 'k) (keyB:'b -> 'k)
(addB:'p * 'a -> 'p) (setB:'a * 'b -> unit) (remB:'b -> unit)
(parB:'p) = ...
अब यहां मुझे परेशानी हो रही है। 'a
और 'b
पदानुक्रमित हैं, इसलिए फ़ंक्शन को यह जानने की आवश्यकता है कि 'a
और 'b
के गुणों को यह पता होना चाहिए (एक बार जब यह उनकी चाबियों की तुलना करता है और निर्णय लेता है कि वे अब तक मेल खाते हैं और उन्हें आगे बढ़ाया जाना चाहिए)। इन "बच्चे" गुणों के लिए, इसे सिंक करने के लिए पारित सभी तर्कों की आवश्यकता होती है, लेकिन उनके संबंधित प्रकारों के लिए।
यह तब होता है जब यह स्पष्ट हो गया कि यह एक डेटा संरचना समस्या है। मैं इस जानकारी को एक साथ कैसे जोड़ सकता हूं कि रूट ऑब्जेक्ट को sync
पर पारित किया जा सकता है और यह ग्राफ को नीचे की ओर ले जा सकता है? मेरा प्रारंभिक विचार एक वर्ग में सभी तर्कों को शामिल करना था, जिसमें बच्चों की संपत्ति होगी (उसी प्रकार के ResizeArray
)। लेकिन अलग-अलग प्रकार के विभिन्न गुणों के साथ, मैं इसे काम करने के लिए एक रास्ता नहीं समझ पाया, खिड़की से फेंकने के प्रकार से कम और अधिकांश या सभी प्रकार के तर्क obj
बना रहा।
- इस पहले से ही कर
- क्या डेटा संरचना मैं संपुटित करने के लिए उपयोग कर सकते हैं (मैं कुछ भी खोजने के लिए नहीं कर पाए हैं) के लिए एक अच्छी तरह से स्थापित विधि है:
तो यहाँ मेरी सवाल कर रहे हैं इस काम को करने के लिए आवश्यक डेटा?
मैं अपना सर्वश्रेष्ठ करने की कोशिश की इस अच्छी तरह से समझाने के लिए है, लेकिन अगर कुछ भी स्पष्ट नहीं है, कृपया पूछना, और मैं बेहतर जानकारी उपलब्ध कराने की कोशिश करेंगे।
मुझे लगता है कि आपको एक इंटरमीडिएट डेटा स्ट्रक्चर की आवश्यकता होगी जिस पर यह एल्गोरिदम काम करेगा, विभिन्न प्रकार के डेटा के लिए भी, आपको उस डेटा को इंटरमीडिएट डेटा स्ट्रक्चर में बदलने, अलगो चलाने और फिर इसे मूल डेटा में बदलने की आवश्यकता होगी फॉर्म – Ankur