सबसे पहले, यदि आपके पास पहले से नहीं है, तो आपको मैकपीक के पेपर को जीएलआर http://www.cs.berkeley.edu/~smcpeak/papers/elkhound_cc04.ps पर पढ़ना चाहिए। यह एक अकादमिक पेपर है, लेकिन यह जीएसएस, जीएलआर, और उन्हें लागू करने के लिए उपयोग की जाने वाली तकनीकों पर अच्छा विवरण देता है। यह एक जीएलआर पार्सर को लागू करने के साथ कुछ बालों के मुद्दों को भी समझाता है।
आपके पास ग्राफ-संरचित ढेर को लागू करने के लिए तीन भाग हैं।
I. ग्राफ़ डेटा संरचना स्वयं
II। ढेर
III। जीएलआर का उपयोग जीएसएस
आप सही हैं, Google बहुत मदद नहीं है। और जब तक आप एल्गोरिदम पुस्तकें पढ़ना पसंद नहीं करते हैं, तब तक वे बहुत मदद नहीं करेंगे।
आई ग्राफ डेटा संरचना
के बारे में "प्रत्यक्ष प्रतिनिधित्व" को लागू करने के लिए सबसे आसान होगा रोब के जवाब। यह एक लिंक्ड-लिस्ट की तरह है, सिवाय इसके कि प्रत्येक नोड में केवल एक के बजाय अगले नोड्स की एक सूची है।
यह डेटा संरचना एक निर्देशित ग्राफ है, लेकिन मैकपीक के अनुसार, जीएसएस में ईपीएसलॉन-व्याकरण के लिए चक्र हो सकते हैं।
II। ढेर
एक ग्राफ-संरचित ढेर अवधारणात्मक रूप से केवल नियमित ढेर की एक सूची है। एक स्पष्ट व्याकरण के लिए, आपको केवल एक ढेर की आवश्यकता है। जब आप एक पार्सिंग टकराव करते हैं तो आपको अधिक ढेर की आवश्यकता होती है ताकि आप एक ही समय में दोनों पार्सिंग क्रियाएं कर सकें और दोनों कार्य अलग-अलग राज्य बनाए रख सकें। ग्राफ का उपयोग करने से आप इस तथ्य का लाभ उठा सकते हैं कि ये ढेर तत्व साझा करते हैं।
यह समझने में मदद कर सकता है कि पहले लिंक किए गए सूची के साथ एक स्टैक को कैसे कार्यान्वित किया जाए। लिंक्ड सूची का मुखिया ढेर का शीर्ष है। स्टैक पर एक तत्व को धक्का देना सिर्फ एक नया सिर बनाना और इसे पुराने सिर पर इंगित करना है। ढेर से एक तत्व को रोकना सिर्फ पॉइंटर को सिर पर ले जा रहा है-> अगला।
एक जीएसएस में, सिद्धांत समान है। तत्व को धक्का देना सिर्फ एक नया सिर नोड बनाना और इसे पुराने सिर पर इंगित करना है। यदि आपके पास दो शिफ्ट ऑपरेशन हैं, तो आप दो तत्वों को पुराने सिर पर धक्का देंगे और फिर दो हेड नोड्स होंगे। संकल्पनात्मक रूप से यह केवल दो अलग-अलग ढेर हैं जो शीर्ष तत्व को छोड़कर प्रत्येक तत्व को साझा करते हैं। एक तत्व को रोकना सिर्फ अगले पॉइंट्स में से प्रत्येक का पालन करके हेड पॉइंटर को स्टैक के नीचे ले जा रहा है।
III। जीएलआर का उपयोग जीएसएस
यह है जहां मैकपीक का पेपर उपयोगी पढ़ा जाता है।
जीएलआर एल्गोरिदम एक ही राज्य तत्व वाले स्टैक हेड विलय करके जीएसएस का लाभ उठाता है। इसका मतलब है कि एक राज्य तत्व में एक से अधिक बच्चे हो सकते हैं। कम करने पर, जीएलआर एल्गोरिदम को स्टैक हेड से सभी संभावित पथों का पता लगाना होगा।
आप प्रत्येक नोड की निर्धारिक गहराई को बनाए रखकर जीएलआर अनुकूलित कर सकते हैं। यह ढेर में एक विभाजन से दूरी है। इस तरह आपको हमेशा एक स्टैक स्प्लिट की खोज नहीं करना पड़ता है।
यह एक कठिन काम है! इतनी अच्छी किस्मत!
यहां, छह साल बाद, जीएसएस डेटा संरचना पर अभी भी बहुत कम पाया जा रहा है। विकिपीडिया में बहुत संक्षिप्त "उदाहरण" है, लेकिन यह भी संचालन की गणना नहीं करता है, और मैं इसके द्वारा उलझन में हूं, क्योंकि ऐसा लगता है कि एक ही गहराई में सभी "समांतर" ढेर हैं। क्या कोई इस पर अधिक जानकारी जोड़ सकता है? – LHP