2011-08-19 13 views
12

मैं दो पदानुक्रमित संरचनाओं को सिंक्रनाइज़ करने के लिए एक एल्गोरिदम लिखने की उम्मीद कर रहा हूं। ये संरचना ऑब्जेक्ट ग्राफ़, रिलेशनल डेटाबेस टेबल आदि में संग्रहीत डेटा हो सकती है (यहां तक ​​कि दो अलग-अलग संरचनाएं, जब तक उनके तुलनात्मक कुंजी हों)। सिंक्रनाइज़ेशन एक तरफ होगा, यानी, एक संरचना प्रोटोटाइप होगी, और दूसरा मिलान करने के लिए संशोधित किया जाएगा।दो पदानुक्रमों की एक तरफा सिंक

मान लें कि हमारे पास sync फ़ंक्शन है। प्रोटोटाइप

  • objB - - वस्तु
  • keyA संशोधित किया जा करने के लिए - के लिए objA
  • keyB कुंजी पैदा समारोह - कुंजी पैदा समारोह

    1. objA: यह निम्न को स्वीकार करने की आवश्यकता होगी objB
    2. addB - objB बनाने के लिए फ़ंक्शन (नए objB की वापसी आईडी)
    3. setB - अद्यतन करने के लिए समारोह objB
    4. remB - नष्ट करने के लिए समारोह एक objB
    5. 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 बना रहा।

    1. इस पहले से ही कर
    2. क्या डेटा संरचना मैं संपुटित करने के लिए उपयोग कर सकते हैं (मैं कुछ भी खोजने के लिए नहीं कर पाए हैं) के लिए एक अच्छी तरह से स्थापित विधि है:

      तो यहाँ मेरी सवाल कर रहे हैं इस काम को करने के लिए आवश्यक डेटा?

    मैं अपना सर्वश्रेष्ठ करने की कोशिश की इस अच्छी तरह से समझाने के लिए है, लेकिन अगर कुछ भी स्पष्ट नहीं है, कृपया पूछना, और मैं बेहतर जानकारी उपलब्ध कराने की कोशिश करेंगे।

  • +0

    मुझे लगता है कि आपको एक इंटरमीडिएट डेटा स्ट्रक्चर की आवश्यकता होगी जिस पर यह एल्गोरिदम काम करेगा, विभिन्न प्रकार के डेटा के लिए भी, आपको उस डेटा को इंटरमीडिएट डेटा स्ट्रक्चर में बदलने, अलगो चलाने और फिर इसे मूल डेटा में बदलने की आवश्यकता होगी फॉर्म – Ankur

    उत्तर

    1

    मुझे यकीन है कि यह इसे अधिक बढ़ा रहा है लेकिन यह मेरा विचार है।

    यदि यह एक डीएजी है तो आप ओबीजेए की पहली चौड़ाई कर सकते हैं।जब आप objA से नोड को एनक्यू करते हैं तो ओबीजेबी और आपको आवश्यक किसी भी अन्य जानकारी (ट्यूपल) शामिल हैं। फिर जब आप डेब्यू करते हैं तो आप objB को ठीक करते हैं।

    आप अपने enqueueing में अलग बच्चे प्रकारों को प्रबंधित करने के लिए एक साथ भेदभाव संघ इस्तेमाल कर सकते हैं।

    +0

    दिलचस्प विचार। इससे पहले कि मैं इसे आजमा सकूं, यह एक या दो दिन हो सकता है। तुम्हारे पास वापिस आउंगी। सलाह के लिये धन्यवाद! – Daniel

    +0

    यह मूल समस्या को बरकरार रखता है जो विभिन्न प्रकार के बाल नोड्स है। – Daniel

    0

    दो डेटा संरचनाओं से diffgrams उत्पन्न करें और परिवर्तन की गई समस्या में परिवर्तनों को मानचित्र करें।

    संबंधित मुद्दे