मैं यह कहकर शुरू करना चाहता हूं कि यह एक गृहकार्य नहीं है। मैं एक बेहतर प्रोग्रामर बनने के लिए इंट्रोडक्शन टू अल्गोरिदम - प्रसिद्ध सीएलआरएस पाठ पढ़ रहा हूं। मैं पुस्तक में दी गई समस्याओं और अभ्यासों को स्वयं हल करने का प्रयास कर रहा हूं।
मैं CLRS द्वितीय संस्करण से अध्याय 10 प्राथमिक डेटा संरचनाओं से एक्सर्साइज़ 10.1-2 को हल करने की कोशिश कर रहा हूं । यहाँ बताया गया है:
बताइए कि एक ए [ए 1. एन] में दो स्टैक को कैसे लागू किया जाए, ताकि जब तक दोनों स्टैक में तत्वों की कुल संख्या n न हो, तब तक न तो ओवरफ्लो हो सके । PUSH और POP संचालन O (1) समय में चलना चाहिए ।
इसका समाधान जो मैं अब तक लेकर आया हूं वह है:
सरणी चलो एक [1..n] दो ढेर को लागू: एस 1 [1..i] और एस 2 [i..n] ।
के लिए PUSH-एस 1 और PUSH-S2 संचालन, अगर ढेर 'पूर्ण' है तो में तत्वों को आगे बढ़ाने शुरू अन्य ढेर (जैसे। अगर ढेर एस 1 पूर्ण जब एक नए तत्व, में पुश करने की कोशिश कर रहा है तो में उस तत्व धक्का है स्टैक S2 और इसके विपरीत)।
इस दृष्टिकोण के साथ समस्या यह है कि मैं पीओपी-एस 1 या पीओपी-एस 2 को मज़बूती से नहीं देख पाऊंगा क्योंकि यह याद रखने का कोई तरीका नहीं है कि कौन सा तत्व किस स्टैक का है। यदि स्टैक के तत्व (की, वैल्यू) जोड़े हैं, तो स्टैक नंबर होने की कुंजी है, तो एक तत्व पॉप करने के लिए मुझे सबसे खराब स्थिति में, i या (ni) बार - जो O (n) होगा ) (अगर मैं यहां गलत हूं तो मुझे सुधारने के लिए स्वतंत्र महसूस करें), जो ओ (1) नहीं होगा ।
मैं काफी समय से इस सवाल पर अपना सिर पीट रहा हूं। क्या मैं सही रास्ते पर हूं? क्या कोई इस समस्या को हल करने के लिए मेरे संभावित संकेत दे सकता है?
सामान्य तौर पर, मुझे इन समस्याओं के बारे में कैसे सोचना चाहिए? या केवल वास्तव में बुद्धिमान लोग ही इस प्रकार की समस्याओं का समाधान कर सकते हैं? इन समस्याओं (जैसे अनुभव प्राप्त करना) से निपटने / हल करने से क्या मुझे इस पर बेहतर बनने में मदद मिलेगी?
मुझे आत्मज्ञान की प्रतीक्षा है।