क्या ये पेड़ आइसोमोर्फिक हैं?


21

परिचय

इस चुनौती में, आपका कार्य एक प्रोग्राम लिखना है जो यह तय करता है कि क्या दिए गए दो पेड़ आइसोमोर्फिक हैं। एक पेड़ का अर्थ है एक निर्देशित चक्रीय ग्राफ, जहां हर नोड में जड़ के अलावा एक आउटगोइंग एज होता है, जिसमें कोई नहीं होता है। दो पेड़ आइसोमॉर्फिक हैं यदि एक को नोड्स का नाम देकर दूसरे में बदला जा सकता है। उदाहरण के लिए, दो पेड़ (जहां हर किनारे की ओर इशारा करते हैं)

  0       0
 /|\     /|\
1 3 4   1 2 5
|\       /|
2 5     3 4

आसानी से आइसोमॉर्फिक होने के लिए देखा जाता है।

हम Lनिम्नलिखित तरीके से एक पेड़ को nonnegative पूर्णांक की सूची के रूप में एन्कोड करते हैं । पेड़ की जड़ में लेबल होता है 0, और इसमें नोड्स भी होते हैं 1,2,...,length(L)। प्रत्येक नोड i > 0में एक आउटगोइंग एज होता है L[i](1-आधारित इंडेक्सिंग का उपयोग करके)। उदाहरण के लिए, सूची (तत्वों के तहत दिए गए सूचकांक के साथ)

[0,0,1,3,2,2,5,0]
 1 2 3 4 5 6 7 8

पेड़ को घेरता है

  0
 /|\
1 2 8
| |\
3 5 6
| |
4 7

इनपुट

आपके इनपुट्स मूल प्रारूप या आपकी भाषा में दिए गए नॉनवेजेटिव पूर्णांकों की दो सूचियाँ हैं। वे ऊपर निर्दिष्ट तरीके से दो पेड़ों को एनकोड करते हैं। आप उनके बारे में निम्नलिखित शर्तों को मान सकते हैं:

  1. वे खाली नहीं हैं।
  2. उनकी लंबाई समान है।
  3. प्रत्येक सूची सभी (1-आधारित) सूचकांकों के लिए Lसंतुष्ट करती है ।L[i] < ii

उत्पादन

यदि पेड़ आइसोमोर्फिक हैं, और नहीं तो एक मिथ्या मूल्य, आपका उत्पादन एक सत्य मूल्य होगा।

नियम और स्कोरिंग

आप एक पूर्ण कार्यक्रम या एक फ़ंक्शन लिख सकते हैं। सबसे कम बाइट गिनती जीतता है, और मानक खामियों को रोक दिया जाता है। कोई समय प्रतिबंध नहीं हैं, लेकिन बिल्ट-इन इंसिडेंस जो पेड़ या ग्राफ आइसोमॉर्फिज़्म को तय करते हैं, को रोक दिया जाता है।

परीक्षण के मामलों

सत्य दृष्टांत

[0] [0]
[0,1,2,1] [0,1,1,3]
[0,1,1,3,3] [0,1,2,2,1]
[0,1,0,1,2,3,3,0] [0,0,2,1,0,4,2,1]
[0,1,2,3,1,2,3,0,8] [0,1,0,3,3,4,4,7,7]

झूठा उदाहरण

[0,0] [0,1]
[0,1,2,0,3,3,4] [0,1,2,3,0,4,3]
[0,1,0,1,2,3,3,0] [0,0,2,1,0,5,2,1]
[0,1,1,0,1,3,2,1,5] [0,1,0,3,3,3,2,5,2]
[0,1,2,3,1,2,3,0,8] [0,1,0,1,4,4,5,6,6]
[0,1,0,2,0,3,0,4,0,5] [0,0,2,1,0,3,4,0,0,9]


@ डिजीटलट्रूमा डंगिट, आपने ओपी को नीचा बनाया भवन ... मेरे पास एक 60-बाइट वाला एमएमए समाधान था ...
लेगियनममाल 978

जवाबों:


2

मैथेमेटिका, 48 बाइट्स

SameQ@@(Sort//@(0(0//.PositionIndex@#))&/@{##})&

यह उपयोग करने वाले समाधान से भी छोटा है IsomorphicGraphQ:

IsomorphicGraphQ@@(Graph@*MapIndexed[#->Tr@#2&]/@{##})&

6

पायथन, 83

दूसरी पंक्ति में अनाम फ़ंक्शन मेरा समाधान है।

f=lambda l,i=0:sorted(f(l,j+1)for j,e in enumerate(l)if e==i)
lambda a,b:f(a)==f(b)

fएक उप-प्रकार का एक canonized रूप देता है जो कि अपने canonized बच्चों की क्रमबद्ध सूची है। तब हमें यह देखना होगा कि क्या प्रत्येक पेड़ के कैनोनीकृत रूप बराबर हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.