क्या आरबी पेड़ को पूरी तरह से नहीं समझना ठीक है? [बन्द है]


15

इसलिए मैंने अभी कॉर्मेन में लाल काले पेड़ सीखे और वाह! आमतौर पर मैं सभी एल्गोरिदम और डेटा संरचनाओं को उस बिंदु पर समझना पसंद करता हूं जिसे मैं उन्हें छद्म कोड को देखने के लिए धोखा दिए बिना खरोंच से पुनर्निर्माण कर सकता हूं। मुझे वास्तव में एल्गोरिदम पसंद है, इसलिए मुझे यह सीखने में मज़ा आता है कि वे कैसे काम करते हैं और मैं आमतौर पर लाइन से जाता हूं और कोड को देखकर कुछ मामलों की कोशिश करता हूं और जांचता हूं कि क्या हो रहा है जो मुझे समझ में आया कि क्या होना चाहिए।

बस समझ में आ रहा है कि आरबी पेड़ों के लिए मुझे बहुत समय लगा। यहां तक ​​कि पुस्तक के स्पष्टीकरण के साथ, मुझे अभी भी कोड को समझना मुश्किल लग रहा था। यह उल्लेख करने के लिए नहीं कि मैं यह नहीं समझ सका कि रोटेशन कैसे / क्यों काम करता है। मुझे यह बिल्कुल भी सहज नहीं लगता। मेरा मतलब है, तीन (छह वास्तव में) सम्मिलन के लिए अलग-अलग मामले और फिर विलोपन के लिए 4 मामले? क्या इस बात को समझना संभव है? मेरे लिए इस कोड को बिना धोखा दिए पुनर्निर्माण करना असंभव है। बाइनरी ट्री तक मैं अपने सिर के बाहर सामान को लागू कर सकता था, कुछ ट्वीकिंग के साथ यह हमेशा काम करेगा, लेकिन आरबी पेड़ मैं कोशिश करने वाला नहीं हूं। मेरा मतलब है, यहां तक ​​कि शिक्षक भी कभी-कभी भ्रमित हो जाते हैं इसलिए मुझे लगता है कि यह वास्तव में इतना आसान नहीं है, लेकिन एक ही समय में, हमें सब कुछ नहीं समझना चाहिए जो कि हो रहा है या कम से कम क्यों? किताब नहीं हुई ' t वास्तव में समझाता है कि कैसे किसी को घूर्णन का विचार आया। किसी ने कैसे ध्यान दिया कि 2 घुमाव के साथ आप किसी भी प्रविष्टि समस्या को हल कर सकते हैं? वह आश्चर्यजनक है!

मेरा सवाल है, क्या मुझे वास्तव में आरबी के पेड़ों को समझने में 100% है? मैं इसे पूरी तरह से समझने के बिना खराब लंघन सामान की तरह महसूस करता हूं। अग्रिम लोगों में धन्यवाद! (पुनश्च: आरबी-ट्री के लिए कोई टैग नहीं है, वास्तव में पेड़ के लिए भी नहीं है, बस बाइनरी-ट्री है, इसलिए मैंने केवल एल्गोरिदम रखा है)


18
"युवक, गणित में तुम चीजों को नहीं समझते। तुम बस उनकी आदत डाल लो।" - जॉन वॉन न्यूमैन

2
@ क्लैश किस संदर्भ में? मुझे नहीं लगता कि मुझे कभी यह जानने की ज़रूरत है कि आरबी के पेड़ एक पेशेवर वातावरण में कैसे काम करते हैं, लेकिन आप जो करना चाहते हैं उसके आधार पर भिन्न हो सकते हैं। मैं कहूंगा कि जब तक आपको जरूरत नहीं है, तब तक आप उन्हें छोड़ना ठीक रहेगा।
एडम लेअर

4
@ क्लेश यह मुझे बहुत परेशान करता है कि आप कहते हैं कि किसी बाहरी स्रोत से मार्गदर्शन के साथ कुछ भी लागू करने के लिए यह "धोखा" है। छद्मकोड एक कारण से मौजूद है - वे इसे स्मृति से करने की आवश्यकता को समाप्त करते हैं। मैं विंस्टन के साथ पूरी तरह से सहमत हूं: स्मृति से समझना और जानना दो अलग-अलग विशिष्ट चीजें हैं। याद रखना! = समझना और समझना! = याद रखना।
doppelgreener

3
यह वास्तव में आरबी पेड़ों की परवाह नहीं करना ठीक है - जब तक मुझे उनकी आवश्यकता नहीं है?
स्टीवन ए। लोवे

1
हो सकता है कि जब आप अन्य सभी प्रकार के वृक्षों के क्रियान्वयन को प्राथमिकता देते हैं, तो आपको आरबी पेड़ों का उपयोग करना चाहिए। जानिए वे कौन सी समस्याएं हल करते हैं, और आरबी पेड़ चुनने के सभी कारण। लेकिन अगर आपको कभी एक (किसी परीक्षा के बाहर) को लागू करना है, तो आप इसे देख पाएंगे; तो यह जानने के लिए कि इसे मेमोरी से कैसे परेशान किया जाए?
दाऊद का कहना है कि मोनिका

जवाबों:


13

आप "समझ" के विचार को "पुस्तक को देखे बिना कोड लिखने में सक्षम होने के साथ" बराबरी करने लगते हैं। ये दो अलग-अलग चीजें हैं। यदि आप देख सकते हैं कि पेड़ के नोड्स को घुमाते हुए संतुलन बनाए रखने के लिए पेड़ को कैसे फिर से व्यवस्थित किया जाता है, तो आप इसे समझते हैं। उन सभी मामलों को तुरंत याद करने में सक्षम होना, जिनके लिए घुमाव लागू होते हैं, यह बात नहीं है।

अगर मैं इसके साथ खेलने के लिए कलम / कागज / कई घंटे लगाता हूं, तो मैं संभवतः उन घुमावों का पता लगा सकता हूं। लेकिन मैं निश्चित रूप से इसे बिना सोचे समझे नहीं लिख सकता। अगर मुझे वास्तव में ऐसा एल्गोरिदम लिखना था, तो मैं यह सुनिश्चित करने के लिए देखूंगा कि मुझे सभी विवरण सही मिल रहे हैं। बेशक, लगभग किसी भी स्थिति में मैं पहले से ही लिखित कोड का उपयोग करूंगा।

जहां यह सब उपयोग में आता है, जब आप एक ऐसी स्थिति में आते हैं जो किसी भी एल्गोरिदम में बिल्कुल फिट नहीं होती है। आपको अपने स्वयं के पेड़ के कार्यान्वयन को लिखने की आवश्यकता नहीं होगी। लेकिन आप खुद से कह सकते हैं, कहने की ज़रूरत है कि दोगुनी-लिंक्ड सूचियों की एक ऊँची एड़ी के जूते को समतल करने की आवश्यकता है। उस स्थिति में, रोटेशन के पीछे के मूल विचार को समझने में बहुत मदद मिल सकती है।


2
'आप "समझ" के विचार को "पुस्तक को देखे बिना कोड लिखने में सक्षम होने के साथ" बराबरी करने लगते हैं। ये दो अलग चीजें हैं। ' त्रुटि ... नहीं। यदि आप इसे लिख रहे हैं, तो इसका मतलब है कि आपने एक या दो साल से अधिक समय तक गणित का अध्ययन नहीं किया है, यदि ऐसा है भी। कुछ बिंदु पर, गणित को समझना (जो कि, ट्यूरिंग के सौजन्य से, कंप्यूटिंग के लिए समान है) केवल उसी चीज़ को प्रदर्शित करने में सक्षम है जो आपने "समझा" है। कोई वर्कअराउंड या ifs या maybes या foo या bar या baz नहीं है। उस स्तर पर, यदि आप अपने गणित के दावे को साबित नहीं कर सकते हैं, तो आप टोस्ट हैं। (जब तक आपका नाम फ़र्मेट नहीं है।)
डेनिस डी बर्नार्डी

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

2
सावधान रहें कि आप इसे कहाँ देखते हैं - IIRC, कुछ पाठ्यपुस्तकों में उनके लाल-काले ट्री एल्गोरिदम में महत्वपूर्ण गलतियाँ हैं।
स्टीव

2
@ स्टीव 314, आपको आरबी को एक पाठ्यपुस्तक लेखक के रूप में समझने की आवश्यकता नहीं है! ;)
विंस्टन इवर्ट

धन्यवाद विंस्टन, इससे मुझे राहत मिली! केवल कुछ चीजें हैं जो मुझे उस कोड के साथ समझ में नहीं आईं जो मैं निकट भविष्य में पोस्ट कर सकता हूं। लेकिन मुझे बहुत खुशी है कि यह समझ में नहीं आना ठीक है (समझ से मेरा मतलब है कि कोड को बिना धोखा दिए लिखना) क्यों / कैसे किसी ने प्रविष्टि के लिए 3/6 मामलों और हटाने के लिए 4/8 मामलों को देखा।
बर्नार्डो पाइरेस

4

यदि आप सभी कार्यात्मक प्रोग्रामिंग के साथ बातचीत कर रहे हैं, तो आपको यह तरीका उनसे बेहतर लग सकता है (ओकासाकी 1999):

http://www.eecs.usma.edu/webs/people/okasaki/jfp99redblack.pdf

यदि नहीं, तो कम से कम दिल को खोलने वाले वाक्य से लें:

हर कोई अपने परिचयात्मक कंप्यूटर विज्ञान कक्षाओं में संतुलित द्विआधारी खोज पेड़ों के बारे में सीखता है, लेकिन यहां तक ​​कि वास्तव में इस तरह के जानवर को लागू करने के बारे में सोचा गया था ।


हहह रयन! इससे मुझे राहत मिली है! आपका बहुत बहुत धन्यवाद! आज मैंने यह भी देखा कि आरओ-पेड़ों के बारे में एसओ पर बहुत कम सवाल हैं। इसलिए मुझे लगता है कि वे वास्तव में मुश्किल हैं।
बर्नार्डो पाइरेस

2
मुझे लगता है कि यह सिर्फ सीएस सीएस छात्रों से अलग है, वे उस तरह की चीज हैं जिसे प्रोग्रामिंग भाषा के अनुसार लगभग एक बार लागू किया जाता है। (या कम। मुझे लगता है कि स्कीम के लिए सबसे लोकप्रिय आरबी कोड OCaml के लिए आरबी कोड से पोर्ट किया गया था।)
रयान कल्पेपर

लिंक टूट गया है: दर्पण 1 , दर्पण 2 । भविष्य में किसी बिंदु पर दोनों दर्पण अनुपलब्ध हैं: क्रिस ओकासाकी, "फंक्शनल सेटिंग में रेड-ब्लैक ट्रीज़", जर्नल ऑफ़ फंक्शनल प्रोग्रामिंग, 9 (4), पीपी 471-477, जुलाई 1999
स्नोबॉल

3

आपको बारीकियों को विस्तार से समझने की आवश्यकता नहीं है। आपको चाहिए आरबी पेड़ों और 2-3-4 पेड़ों (सेडगविक को देखें) के बीच के रिश्ते समझना । जब आप 2-3-4 पेड़ समझते हैं, तो उन सभी क्रेजी रोटेशन बहुत अधिक समझ में आते हैं। यदि आपके प्रोफेसर ने 2-3-4 पेड़ों के कार्यान्वयन विस्तार के रूप में आरबी पेड़ों को नहीं पढ़ाया है, तो आपको शायद 2-3-4 पेड़ों पर कुछ पढ़ना चाहिए। (सिडगविक का इलाज बहुत अच्छा है; विकिपीडिया में यह नहीं है।)

अधिक सामान्यतः, एल्गोरिथ्म क्यों काम करता है के कार्यान्वयन के विवरण को समझना केवल कभी-कभी उपयोगी होता है। एल्गोरिथ्म क्यों काम करता है के तर्क को समझना लगभग हमेशा उपयोगी होता है। स्वयं एल्गोरिथ्म के साथ आने में सक्षम होने के नाते, आमतौर पर आवश्यक नहीं होता है, हालांकि आप जितना अधिक एल्गोरिदम को समझेंगे उतना बेहतर मौका आपके पास होगा।


1

यदि आपको अगले सप्ताह अपनी परीक्षा के लिए "आरबी ट्रीज बाय हार्ट" की आवश्यकता है, तो आपको बुलेट को काटने और उन्हें सीखना होगा। उस स्थिति में, आपको अपने सीखने के तरीकों पर पुनर्विचार करना चाहिए। शायद आरबी ट्रीज़ को एक क्लास मेट को समझाने की कोशिश करने से आपको एक और रात को लोनसम कोड लिखने में मदद मिलेगी।

यदि आरबी पेड़ छुट्टियों के बाद आपके अगले पाठ्यक्रम के लिए एक आधार हैं, तो उन्हें अब (बुरी भावनाओं के बिना) छोड़ दें और इस सेमेस्टर के पाठ्यक्रम पर ध्यान केंद्रित करें। लेकिन अपनी आँखों को उन विषयों के लिए छील कर रखें, जो आपको आरबी ट्रीज़ के दूसरे प्रयास के लिए तैयार कर सकते हैं।

आप ईमानदारी से है कि आप वास्तव में उन्हें आवश्यकता नहीं होगी लगता है (cf. अन्ना लेअर की टिप्पणी), उन्हें चुंबन अफसोस के बिना अलविदा - कोई भी अधिक है कि ज्ञान के समुद्र में एक बूंद (बस बहुत बुरा जानता शिक्षक अक्सर लगता है कि उनके बूंद सबसे है महत्वपूर्ण)।


1

प्रोग्रामिंग सफलता की कुंजी कभी हार नहीं माननी है :

आज इसके आरबी के पेड़ कल कुछ और होंगे। बड़ा सबक नहीं दे रहे हैं

मेरे लिए, यह प्रोग्रामिंग का मुख्य सार है, हार नहीं मानना ​​...

मेरा सुझाव है कि आप प्रयास करते रहें , और जब आप इसे विफल न करें

"जब तक आप प्राप्त नहीं करते, जब तक यह क्लिक नहीं करता है, तब तक यह चलता है।"

क्योंकि एक बार जब आप पहाड़ों पर काबू पा लेते हैं, तो आसमान साफ ​​हो जाता है। आपका दिमाग समझ में बदलाव करता है, आप अस्थायी रूप से ऊंचे (अगले पहाड़ तक) हैं । यह लौकिक उत्थान संसार के समस्त धन से अधिक है ।।


धन्यवाद, यह बिल्कुल मेरा डर था! अगर मैं इसे छोड़ दूं, तो मुझे आगे की चीज देने से क्या रोका जा रहा है? यही कारण है कि मैंने प्रविष्टि और विलोपन को समझने के लिए लगभग पूरा दिन बर्बाद कर दिया।
बर्नार्डो पाइरेस

यह बेकार नहीं है, मेरा विश्वास करो जब यह सभी पसीने और आँसू के लिए ऊपर से अधिक "क्लिक" करता है।
डार्क नाइट

0

इसे समझने का सबसे अच्छा तरीका इसे आज़माना है :

  • 3 या 6 घुमाव हैं। कागज का एक टुकड़ा लें और उन्हें एक-एक करके लिखें।
  • एक बार जब आप इसे प्राप्त करते हैं, तो जाएं और एक लाल काले पेड़ को लागू करें। यह ठीक है अगर आपको कुछ चीजें देखनी हैं।

यह हमने कॉलेज में कैसे किया। और परीक्षा के लिए हमें यह समझाना पड़ा कि इसका एक हिस्सा कैसे काम करता है।

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