ऐसा लगता है कि हर जगह मैं देखता हूं, लाल-काले पेड़ों ( std::set
सी ++ में, SortedDictionary
सी #, आदि) का उपयोग करके डेटा संरचनाएं लागू की जा रही हैं ।
मेरे एल्गोरिदम वर्ग में सिर्फ (क, ख), लाल-काले और AVL के पेड़ों को कवर करने के बाद, यहाँ जो मुझे मिला (वह भी प्राध्यापकों से पूछकर, कुछ किताबों को देखकर और थोड़ा गुगला करके):
- एवीएल पेड़ों में लाल-काले पेड़ों की तुलना में छोटी औसत गहराई होती है, और इस तरह एवीएल पेड़ में एक मूल्य की खोज लगातार तेज होती है।
- एवीएल पेड़ों की तुलना में लाल-काले पेड़ अपने आप को संतुलित करने के लिए कम संरचनात्मक परिवर्तन करते हैं, जो उन्हें सम्मिलित / हटाने के लिए संभावित रूप से तेज़ कर सकते हैं। मैं संभावित रूप से कह रहा हूं, क्योंकि यह पेड़ के संरचनात्मक परिवर्तन की लागत पर निर्भर करेगा, क्योंकि यह रनटाइम और इम्प्लिमेंटेशन पर बहुत कुछ निर्भर करेगा (पेड़ के अपरिवर्तनीय होने पर एक कार्यात्मक भाषा में भी पूरी तरह से अलग हो सकता है?)
ऑनलाइन कई बेंचमार्क हैं जो एवीएल और लाल-काले पेड़ों की तुलना करते हैं, लेकिन मुझे क्या फायदा हुआ कि मेरे प्रोफेसर ने मूल रूप से कहा, कि आमतौर पर आप दो चीजों में से एक करते हैं:
- या तो आप वास्तव में प्रदर्शन के बारे में इतना ध्यान नहीं रखते हैं, जिसमें ज्यादातर मामलों में एवीएल बनाम रेड-ब्लैक का 10-20% अंतर बिल्कुल भी मायने नहीं रखेगा।
- या आप वास्तव में प्रदर्शन के बारे में परवाह करते हैं, जिसमें आप एवीएल और लाल-काले दोनों पेड़ों को खोदते हैं, और बी-पेड़ों के साथ जाते हैं, जिसे बेहतर काम करने के लिए ट्वीक किया जा सकता है (या (ए, बी) -ट्रीज़, मैं ' मैं उन सभी को एक टोकरी में रखने वाला हूं।)
इसका कारण यह है क्योंकि एक बी-ट्री डेटा को मेमोरी में अधिक कॉम्पैक्ट रूप से संग्रहीत करता है (एक नोड में कई मान होते हैं) बहुत कम कैश मिस होंगे। आप उपयोग के मामले के आधार पर कार्यान्वयन को भी मोड़ सकते हैं, और बी-ट्री के ऑर्डर को सीपीयू कैश आकार, आदि पर निर्भर कर सकते हैं।
समस्या यह है कि मुझे लगभग कोई ऐसा स्रोत नहीं मिला है जो वास्तविक आधुनिक हार्डवेयर पर खोज पेड़ों के विभिन्न कार्यान्वयनों के वास्तविक जीवन उपयोग का विश्लेषण करेगा। मैंने एल्गोरिदम पर कई पुस्तकों के माध्यम से देखा है और ऐसा कुछ भी नहीं पाया है जो अलग-अलग पेड़ वेरिएंट की एक साथ तुलना करेगा, यह दिखाने के अलावा कि दूसरे की तुलना में छोटी औसत गहराई है (जो वास्तव में पेड़ के व्यवहार के बारे में बहुत कुछ नहीं कहता है। वास्तविक कार्यक्रमों में।)
यह कहा जा रहा है, क्या कोई विशेष कारण है कि हर जगह लाल-काले पेड़ों का उपयोग किया जा रहा है, जब ऊपर कही गई बातों के आधार पर, बी-पेड़ों को उखाड़ फेंकना चाहिए? (एकमात्र बेंचमार्क के रूप में मैं http://lh3lh3.users.sourceforge.net/udb.shtml भी दिखा सकता हूं , लेकिन यह केवल विशिष्ट कार्यान्वयन की बात हो सकती है)। या यही कारण है कि हर कोई लाल-काले पेड़ों का उपयोग करता है क्योंकि वे लागू करना आसान है, या इसे अलग-अलग शब्दों में कहें, तो खराब तरीके से लागू करना मुश्किल है?
इसके अलावा, यह कैसे बदलता है जब कोई कार्यात्मक भाषाओं के दायरे में जाता है? ऐसा लगता है कि क्लोजर और स्काला दोनों हीश एरे मैप्ड ट्राइ का उपयोग करते हैं, जहां क्लोजर 32 के ब्रांचिंग कारक का उपयोग करता है।