मेरे पास प्रतीकों का एक संभावित अनंत सेट है: A, B, C, ...
एक विशिष्ट विशेष प्लेसहोल्डर प्रतीक ?
भी है (इसका अर्थ नीचे समझाया जाएगा)।पैटर्न के एक बड़े सेट के खिलाफ पेड़ से कैसे मिलान करें?
गैर-खाली परिमित पेड़ों पर विचार करें जैसे कि प्रत्येक नोड में इसका प्रतीक होता है और 0 या अधिक गैर-खाली उप-पेड़ होते हैं। किसी दिए गए नोड के उप-पेड़ों का क्रम महत्वपूर्ण है (इसलिए, उदाहरण के लिए, यदि 2 उप-पेड़ वाले नोड हैं, तो हम अंतर कर सकते हैं कि कौन सा छोड़ा गया है और कौन सा सही है)। कोई भी दिया गया प्रतीक अलग-अलग नोड्स से जुड़ी अधिक बार पेड़ 0 में दिखाई दे सकता है। प्लेसहोल्डर प्रतीक ?
केवल पत्ता नोड्स (यानी नोड्स के उप-पेड़ वाले) से जुड़ा जा सकता है। यह पेड़ की सामान्य परिभाषा से मिलता है कि पेड़ विश्वकोश हैं।
अंतिमता आवश्यकता का मतलब है कि पेड़ में नोड्स की कुल संख्या सकारात्मक परिमित पूर्णांक है। यह इस प्रकार है कि संलग्न उपनिवेशों की कुल संख्या, वृक्ष गहराई और प्रत्येक उप-पेड़ में नोड्स की कुल संख्या सभी सीमित हैं।
पेड़ एक कार्यात्मक नोटेशन में दिए जाते हैं: एक नोड को इसके साथ जुड़े प्रतीक द्वारा दर्शाया जाता है और यदि कोई उप-पेड़ है, तो उसके बाद उप-पेड़ों की अल्पविराम से अलग सूची वाले कोष्ठक से युक्त होते हैं उसी तरह। तो, उदाहरण के लिए पेड़
A
/\
? B
/\
A C
/|\
A C Q
\
?
A(?,B(A(A,C,Q(?)),C))
के रूप में प्रतिनिधित्व किया है।
मेरे पास पेड़ के पूर्व-गणना अपरिवर्तनीय सेट एस है जो मिलान के लिए पैटर्न के रूप में उपयोग किया जाएगा। सेट में आमतौर पर ~ 10 पेड़ होंगे, और इसके प्रत्येक तत्व में आमतौर पर ~ 10-30 नोड होंगे। मैं पहले से ही एस का कोई भी प्रतिनिधित्व बनाने के लिए बहुत समय का उपयोग कर सकता हूं जो नीचे बताई गई मेरी समस्या के अनुरूप सबसे अच्छा होगा।
मैं, कि प्रदान की एक समारोह है कि एक पेड़ टी (आमतौर पर के साथ ~ 10 नोड्स) और चेक जितनी जल्दी संभव स्वीकार करता है लिखने के लिए अगर टी एक सबट्री के रूप में एस के किसी भी तत्व शामिल हैं की जरूरत है प्लेसहोल्डर प्रतीक ?
के साथ किसी भी नोड किसी भी गैर खाली सबट्री से मेल खाता है (दोनों यह टी में या का एक तत्व एस में प्रकट होते हैं)।
कृपया सेट एस और एक मैच की जांच करने के लिए एल्गोरिदम स्टोर करने के लिए डेटा संरचना का सुझाव दें। कोई भी प्रोग्रामिंग भाषा या छद्म कोड ठीक है।
'नियमित पेड़ व्याकरण' और पेड़ automata शोध करने का प्रयास करें। – Antimony
मैं थोड़ा सा अस्पष्ट हूं कि हम एक मैच कैसे निर्धारित करते हैं। क्या ए (?) 'मैच' ए (बी, सी) 'है? क्या 'ए (सी)' मैच 'ए (बी, सी, डी)' है? – tmyklebu
आपके कार्यात्मक नोटेशन उदाहरण में तत्व 'क्यू (?)' क्यों शामिल है? यही है, 'क्यू (?)' क्यू से बाएं पत्ते की तरह दिखता है जहां चित्र क्यू से सही पत्ता दिखाता है, जो शायद 'क्यू (,?)' होना चाहिए। –