प्री-, पोस्ट- और इन-ऑर्डर अनुक्रमिकता के कौन से संयोजन अद्वितीय हैं?


28

हम आदेश के बाद जानते हैं,

post L(x)     => [x]
post N(x,l,r) => (post l) ++ (post r) ++ [x]

और पूर्व-आदेश

pre L(x)     => [x]
pre N(x,l,r) => [x] ++ (pre l) ++ (pre r)

और इन-ऑर्डर ट्रैवर्सल सम्मान। sequentialisation।

in L(x)     => [x]
in N(x,l,r) => (in l) ++ [x] ++ (in r)

हम आसानी से देख सकते हैं कि न तो किसी दिए गए पेड़ का विशिष्ट रूप से वर्णन किया गया है, भले ही हम जोड़ीदार अलग-अलग कुंजी / लेबल लगाते हैं।

तीनों में से कौन सा संयोजन उस छोर तक इस्तेमाल किया जा सकता है और कौन सा नहीं?

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

जवाबों:


16

पहले, मैं मान लूंगा कि सभी तत्व अलग हैं। कोई भी मात्रात्मक अनुक्रम आपको तत्वों के साथ एक पेड़ का आकार बताने जा रहा है [3,3,3,3,3]। डुप्लिकेट तत्वों के साथ कुछ पेड़ों को फिर से बनाना संभव है, ज़ाहिर है; मैं नहीं जानता कि क्या पर्याप्त अच्छी स्थिति मौजूद है।

नकारात्मक परिणामों पर जारी रखते हुए, आप अपने पूर्व-आदेश और पोस्ट-ऑर्डर अनुक्रमिकताओं से अकेले एक द्विआधारी पेड़ को पूरी तरह से पुनर्निर्माण नहीं कर सकते। [1,2]प्रीऑर्डर, [2,1]पोस्ट-ऑर्डर को 1रूट पर 2होना चाहिए , लेकिन या तो बाएं बच्चे या सही बच्चे हो सकते हैं। यदि आप इस अस्पष्टता की परवाह नहीं करते हैं, तो आप पेड़ को निम्नलिखित एल्गोरिथ्म के साथ फिर से संगठित कर सकते हैं:

  • आज्ञा दें पूर्व-क्रम ट्रैवर्सल हो और पोस्ट-ऑर्डर ट्रैवर्सल हो। हमारे पास होना चाहिए , और यह पेड़ की जड़ है।[ y n , , y 1 ] x = y [x1,,xn][yn,,y1]x1=y1
  • y 2 x 2 = y 2 [ x 2 , , x n ] [ y n , , y 2 ]x2 जड़ का सबसे छोटा बच्चा है , और सबसे बच्चा है। यदि , रूट नोड है; अधिक recurse और एकल सबट्री का निर्माण।y2x2=y2[x2,,xn][yn,,y2]
  • अन्यथा, चलो और सूचकांकों हो ऐसी है कि और । बाएं सबट्री का प्री-ऑर्डर ट्रैवर्सल है, जो राइट सबट्री का है, और इसी तरह पोस्ट-ऑर्डर ट्रैवर्सल्स के लिए। बाएँ उप वर्ग में तत्व हैं, और दाएँ उप योग में तत्व हैं। प्रत्येक उपशीर्षक के लिए एक बार पुनर्खरीद करें। वैसे, यह विधि मनमानी शाखाओं वाले पेड़ों के लिए सामान्यीकरण करती है। मनमानी शाखा के साथ, बाएं सबट्री की सीमा का पता लगाएं और इसके तत्वों को दोनों सूचियों से काट लें, फिर बाईं ओर से दूसरे सबट्री को काटने के लिए दोहराएं, और इसी तरह।j x 2 = y i y 2 = x j [ x 2 , , x j - 1 ] [ x j , , x n ] j - 2 = n - i + 1 i - 2 = n - j + 1 - ijx2=yiy2=xj[x2,,xj1][xj,,xn]j2=ni+1i2=nj+1
    j2

जैसा कि कहा गया है, रनिंग टाइम with सबसे खराब स्थिति है (दो बच्चों के मामले में, हम प्रत्येक सूची लिनली खोजते हैं)। यदि आप सूची में निर्माण के लिए तत्व मानों से लेकर इनपुट सूचियों में पदों तक परिमित मानचित्र संरचना का निर्माण करते हैं, तो आप उसे में बदल सकते हैं। । मूल्यों से सूचकांकों तक जाने के लिए एक सरणी या परिमित मानचित्र का भी उपयोग करें; वैश्विक सूचकांकों से चिपके रहते हैं, ताकि पुनरावर्ती कॉल पूरे नक्शे प्राप्त करेंगे और तर्क के रूप में एक सीमा लेंगे कि यह जानने के लिए कि क्या कार्य करना है।Θ ( n 2 ) O ( n )O(n2)Θ(n2)एनO(nlg(n))nlg(n)

प्री-ऑर्डर ट्रैवर्सल और इन-ऑर्डर ट्रैवर्सल , आप पेड़ को इस प्रकार फिर से बना सकते हैं:[ z 1 , , z n ][x1,,xn][z1,,zn]

  • रूट प्री-ऑर्डर ट्रैवर्सल ।x1
  • आज्ञा देना ऐसे सूचकांक कि । फिर बाएं बच्चे का इन-ऑर्डर ट्रैवर्सल है और दाएं बच्चे का इन-ऑर्डर ट्रैवर्सल है। तत्वों की संख्या के आधार पर, बाएं बच्चे का पूर्व-क्रम है और जो सही बच्चे की है। बाएं और दाएं उपप्रकार के निर्माण के लिए पुनरावृत्ति।z k = x 1 [ z 1 , , z k - 1 ] [ z k + 1 , , z n ] [ x 2 , , x k ] [ x k + 1 , , x n ]kzk=x1[z1,,zk1][zk+1,,zn][x2,,xk][xk+1,,xn]

फिर से, यह एल्गोरिथ्म जैसा कि कहा गया है, और यदि सूची से पदों तक मानों में एक परिमित मानचित्र में प्रीप्रोसेस किया गया है, तो में प्रदर्शन किया जा सकता है ।O ( n )O(n2)O(nlg(n))

पोस्ट-ऑर्डर प्लस-इन-ऑर्डर बेशक सममित है।


क्या यहां कोई टाइपो है: "[1,2] प्रीऑर्डर, [1,2] पोस्ट-ऑर्डर के लिए रूट पर 1 होना चाहिए, लेकिन 2 या तो बाएं बच्चे या सही बच्चे हो सकते हैं।" इस तरह के पोस्ट ऑर्डर। पेड़ [2,1] नहीं [1,2] होगा चाहे 2 एक बाएं या दाएं बच्चा हो। इसके अलावा, क्या आपका मतलब है कि अगर प्रीऑर्डर और पोस्टऑर्डर दोनों दिए जाते हैं, तो हम पेड़ को फिर से संगठित नहीं कर सकते हैं, या क्या इसका मतलब यह है कि अगर हमें उनमें से केवल एक दिया जाता है तो हम पेड़ को फिर से नहीं बना सकते हैं?
CEGRD

@CEGRD वास्तव में, पोस्टऑर्डर एक टाइपो था। उदाहरण से पता चलता है कि आप इस मामले में पेड़ को पूरी तरह से फिर से संगठित नहीं कर सकते हैं: आप यह नहीं जान सकते कि 2कोई बच्चा है या सही बच्चा। यह पुनर्निर्माण एल्गोरिथ्म के "सिंगल सबट्री" मामले से मेल खाती है।
गिल्स एसओ- बुराई को रोकें '

यदि यह पता है कि यह बाइनरी सर्च ट्री है तो यह कैसे बदलता है? आपके उदाहरण में ([1,2] प्रीऑर्डर, [2,1] पोस्ट-ऑर्डर) साधारण केस के लिए हम यह निर्धारित करने में सक्षम होंगे कि रूट 1 है और 2 सही बच्चा है (क्योंकि 2 1 से अधिक है) ... सही?
fersarr
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.