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

पायथन में BST को सीरियलाइज़ और डीसीरियलाइज़ करना


मान लीजिए हम एक बाइनरी सर्च ट्री को सीरियलाइज़ और डीसीरियलाइज़ करने के लिए एक एल्गोरिदम डिज़ाइन करना चाहते हैं। सीरियलाइज़ेशन किसी डेटा संरचना या ऑब्जेक्ट को बिट्स के अनुक्रम में बदलने की प्रक्रिया है ताकि इसे फ़ाइल या मेमोरी बफर में संग्रहीत किया जा सके, या नेटवर्क कनेक्शन लिंक पर प्रसारित किया जा सके। बाद में इसे पुनर्निर्मित किया जा सकता है, वह प्रक्रिया डीसीरियलाइज़ेशन है।

उदाहरण के लिए, यदि इनपुट [5,2,9,1,3,7] है, तो आउटपुट होगा: सीरियलाइज़्ड आउटपुट 5.2.9.1.3.7.N.N.N.N.N.N.N, डीसीरियलाइज़्ड आउटपुट: 1, 2, 3, 5, 7, 9 (इनऑर्डर ट्रैवर्सल)।

पायथन में BST को सीरियलाइज़ और डीसीरियलाइज़ करना

इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:

  • एक फ़ंक्शन serialize() परिभाषित करें। यह root लेगा
  • res := एक नई सूची
  • एक क्यू परिभाषित करें और root डालें
  • जब तक क्यू खाली न हो, करें
    • जब तक क्यू खाली न हो, करें
      • current := queue[0]
      • current को res के अंत में डालें
      • क्यू से पहला तत्व हटाएं
      • यदि current नॉन-ज़ीरो है, तो
        • लूप से बाहर निकलें
    • यदि current null है, तो
      • लूप से बाहर निकलें
    • यदि current.left null नहीं है, तो
      • current.left को क्यू के अंत में डालें
    • अन्यथा,
      • क्यू के अंत में None डालें
    • यदि current.right null नहीं है, तो
      • current.right को क्यू के अंत में डालें
    • अन्यथा,
      • क्यू के अंत में None डालें
  • s:= खाली स्ट्रिंग
  • i को 0 से res के आकार तक रेंज में, करें
    • यदि res[i] नॉन-ज़ीरो है, तो
      • s := s concatenate res[i].data
    • अन्यथा,
      • s := s concatenate "N"
    • यदि i res के आकार -1 के समान है, तो
      • लूप से बाहर निकलें
    • s := s concatenate "."
  • s लौटाएं
  • एक फ़ंक्शन deserialize() परिभाषित करें। यह data लेगा
  • data := डॉट का उपयोग करके data को विभाजित करने के बाद भागों की एक सूची
  • stack := एक नई सूची
  • यदि data[0] 'N' के समान है, तो
    • None लौटाएं
  • root := data[0] डेटा के साथ एक नया नोड बनाएं
  • root को stack के अंत में डालें
  • i := 1
  • current := 0
  • जब तक i < data का आकार, करें
    • left:= False
    • यदि data[i] 'N' के समान नहीं है, तो
      • temp := data[i] डेटा के साथ एक नया नोड बनाएं
      • stack[current].left := temp
      • temp को stack के अंत में डालें
    • अन्यथा,
      • stack[current].left := None
    • i := i + 1
    • यदि data[i] 'N' के समान नहीं है, तो
      • temp := data[i] डेटा के साथ एक नया नोड बनाएं
      • stack[current].right := temp
      • temp को stack के अंत में डालें
    • अन्यथा,
      • stack[current].right := None
    • current := current + 1
    • i := i + 1
  • root लौटाएं

उदाहरण

बेहतर समझ के लिए निम्न कार्यान्वयन देखें:

class TreeNode:    def __init__(self, data, left = None, right = None):       self.data = data       self.left = left       self.right = right def insert(temp,data):    que = []    que.append(temp)    while (len(que)):       temp = que[0]       que.pop(0)       if (not temp.left):          if data is not None:             temp.left = TreeNode(data)          else:             temp.left = TreeNode(0)          break       else:          que.append(temp.left)       if (not temp.right):          if data is not None:             temp.right = TreeNode(data)          else:             temp.right = TreeNode(0)          break       else:          que.append(temp.right) def make_tree(elements):    Tree = TreeNode(elements[0])    for element in elements[1:]:       insert(Tree, element)    return Tree def print_tree(root):    # इनऑर्डर ट्रैवर्सल का उपयोग करके प्रिंट करें    if root is not None:       print_tree(root.left)       print(root.data, end = ', ')       print_tree(root.right) class Codec:    def serialize(self, root):       res =[]       queue = [root]       while queue:          while True and queue:             current = queue[0]             res.append(current)             queue.pop(0)             if current:                break          if not current:             break          if current.left:             queue.append(current.left)          else:             queue.append(None)          if current.right:             queue.append(current.right)          else:             queue.append(None)       s=""       for i in range(len(res)):          if res[i]:             s+=str(res[i].data)          else:             s+="N"          if i == len(res)-1:             break          s+="."       return s    def deserialize(self, data):       data = data.split(".")       stack = []       if data[0]=='N':          return None       root = TreeNode(int(data[0]))       stack.append(root)       i = 1       current = 0       while i 

इनपुट

[5,2,9,1,3,7]

आउटपुट

Serialization: 5.2.9.1.3.7.N.N.N.N.N.N.N 1, 2, 3, 5, 7, 9,

  1. Python प्रोग्राम में डेटा विश्लेषण और विज़ुअलाइज़ेशन Python प्रोग्राम में डेटा विश्लेषण और विज़ुअलाइज़ेशन

    इस ट्यूटोरियल में, हम Python में pandas और matplotlib जैसे मॉड्यूल का उपयोग करके डेटा विश्लेषण और विज़ुअलाइज़ेशन के बारे में सीखेंगे। Python डेटा विश्लेषण चीजों के लिए एक उत्कृष्ट फिट है। निम्न कमांड का उपयोग करके pandas और matplotlib मॉड्यूल इंस्टॉल करें।pip install pandaspip install matplotlibइंस्

  1. पायथन डेटा एनालिसिस और विज़ुअलाइज़ेशन (Pandas) पायथन डेटा एनालिसिस और विज़ुअलाइज़ेशन (Pandas)

    Pandas डेटा साइंस और एनालिटिक्स के लिए सबसे लोकप्रिय पायथन लाइब्रेरी है। यह डेटा मैनिपुलेशन, एनालिसिस, और क्लीनिंग के लिए हाई-लेवल अब्स्ट्रैक्शन प्रदान करता है (NumPy पर निर्मित)। इंस्टॉलेशन pip install pandas matplotlib मूल डेटा स्ट्रक्चर्स Series - 1-डायमेंशनल लेबल्ड ऐरे 24]) # मैथ ऑपरेशन्स p

  1. पायथन में डेटा विश्लेषण और विज़ुअलाइज़ेशन पायथन में डेटा विश्लेषण और विज़ुअलाइज़ेशन

    पायथन डेटा विश्लेषण और विज़ुअलाइज़ेशन के लिए कई लाइब्रेरी प्रदान करता है मुख्य रूप से numpy, pandas, matplotlib, seaborn आदि। इस खंड में, हम डेटा विश्लेषण और विज़ुअलाइज़ेशन के लिए pandas लाइब्रेरी पर चर्चा करने जा रहे हैं जो numpy के ऊपर बनी एक ओपन सोर्स लाइब्रेरी है। यह हमें तेजी से विश्लेषण और डे