मैं वास्तव में बिना खोए # 2 का जवाब नहीं दे सकता (बहुत सारे आयाम हैं जिनके साथ आप इन संरचनाओं की तुलना कर सकते हैं), लेकिन # 3 के लिए उत्तर बहुत सरल है।
एक अनिवार्य डेटा संरचना का उपयोग करें अगर: (ए) बिल्कुल कोई अलियासिंग नहीं है, या (ख) आपको वास्तव में कुशल प्रसारण के लिए अलियासिंग का उपयोग करने की आवश्यकता है।
यदि आपकी डेटा संरचना में कोई भी बदलाव नहीं है, तो आप इस तथ्य का लाभ नहीं उठा रहे हैं कि कार्यात्मक डेटा संरचनाएं लगातार हैं। इसलिए उनकी लागत का भुगतान करने का कोई कारण नहीं है। इस सलाह के दो संकेत हैं। सबसे पहले, आप एक कार्यात्मक डेटा संरचना के कार्यान्वयन की सादगी पसंद कर सकते हैं: एक कार्यात्मक लाल-काले पेड़ के लिए विलोपन को लागू करना आपको अभिशाप बना देगा, लेकिन माता-पिता के संकेत के साथ एक लाल-काले पेड़ में विलोपन को लागू करना आपको आत्महत्या का विचार करने पर छोड़ देगा। दूसरा, असाइनमेंट एक gc'd भाषा में आपकी अपेक्षा से अधिक महंगा हो सकता है, क्योंकि लिखने से युवा पीढ़ी से डेटा संरचनाएं निकल सकती हैं। हमारे पास वास्तव में कैश इफेक्ट्स और gc का अच्छा सिद्धांत नहीं है, इसलिए आपके पास बेंचमार्किंग करने के अलावा कोई विकल्प नहीं है।
दूसरा, यदि आपको एक प्रसारण चैनल की आवश्यकता है, तो एक साझा डेटा संरचना इसे करने का एक शानदार तरीका है। निरंतर-समय के अद्यतन के साथ, आप मनमाने ढंग से कई अन्य लोगों को बता सकते हैं कि एक मूल्य बदल गया है। (यही कारण है कि संघ-खोज एक ऐसी महान डेटा संरचना है।) विशुद्ध रूप से कार्यात्मक सेटअप के साथ, आपको या तो उन सभी अन्य लोगों को संशोधित करने की आवश्यकता है, या उन्हें एक राज्य में अमूर्त संकेत देते हैं जिसे आप मैन्युअल रूप से कोड करते हैं (जो एक तरह का ऑब्सट्यूट है। करने के लिए)।
यदि आप या तो एलियासिंग और ऑब्जेक्ट स्वामित्व के बारे में तर्क नहीं करना चाहते हैं, या यदि आपको एक ही डेटा संरचना के कई संस्करणों की आवश्यकता है (आपको एक नया और पुराना संस्करण दोनों की आवश्यकता है, तो), बस एक कार्यात्मक डेटा संरचना का उपयोग करें।
जिस स्थान पर मुझे यह सलाह दी गई है, वह ग्राफ एल्गोरिदम के साथ सबसे कठिन है। वास्तव में बहुत सुंदर अनिवार्य ग्राफ एल्गोरिदम हैं, लेकिन अक्सर ऐसा होता है (जैसे, संकलक लिखते समय) कि आप भी दृढ़ता चाहते हैं। लोग आमतौर पर अंतर को विभाजित करने और शांत अनिवार्य एल्गोरिथ्म का उपयोग करने की कोशिश करते हैं लेकिन दृढ़ता प्राप्त करने के लिए पक्ष पर संस्करण को बोल्ट करने का प्रयास करते हैं। यह आमतौर पर बहुत भयानक है, कीड़े से भरा है, और अनिवार्य एल्गोरिथ्म के प्रदर्शन लाभ को खोने का खतरा है।