मैं Data.Sequence का काफी प्रशंसक रहा हूं . लेकिन जैसा कि मैं Data.Vector के बारे में सीख रहा हूं। , ऐसा लगता है कि यह सब कुछ कर सकता है Data.Sequence कर सकता है, लेकिन बेहतर, साथ ही यह अधिक सामान कर सकता है। क्या हमें डेटा को हटा देना चाहिए। अनुक्रम और प्रचार डेटा। वेक्टर? क्या डेटा का उपयोग करने के कोई अच्छे कारण हैं। डेटा पर अनुक्रम। वेक्टर?
2 जवाब
इनमें से कोई भी डेटा संरचना दूसरे को प्रतिस्थापित नहीं कर सकती है; Data.Sequence
और Data.Vector
वास्तव में अनुक्रमों का प्रतिनिधित्व करने के लिए उपलब्ध डेटा संरचनाओं के बिल्कुल विपरीत छोर पर हैं।
Data.Vector
तत्वों का एक सन्निहित सरणी है। इसका मतलब है छोटी मेमोरी फ़ुटप्रिंट और O(1) लुकअप लेकिन भयानक म्यूटेशन, कॉन्सटेनेशन और कॉपी (O(n) प्रत्येक)। (यदि आप दृढ़ता छोड़ देते हैं तो उत्परिवर्तन ओ (1) हो सकता है।)- दूसरी ओर
Data.Sequence
एक विशुद्ध रूप से कार्यात्मक वृक्ष है। इसका मतलब है उच्च स्मृति उपयोग और कम इलाके, लेकिन यह तेजी से पहुंच और उत्परिवर्तन ओ (लॉग एन) और भयानक संयोजन ओ (लॉग (मिनट (एन 1, एन 2)) और प्रतिलिपि का समर्थन करता है।
डेटा संरचना का चुनाव वास्तव में यहां काम पर निर्भर करता है।
- तत्वों की बड़ी धाराओं को रैखिक फैशन में या यादृच्छिक लुकअप के साथ संसाधित करना
Data.Vector
के साथ सबसे अच्छा किया जाता है। - यदि आपको अपने तत्वों को विभाजित करने, संयोजित करने और बदलने की आवश्यकता है, तो
Data.Sequence
का उपयोग करें।
उपसर्ग साझा करना ऐसा लगता है जैसे Seq
Vector
से बेहतर है। snoc
को Vector
को O(n) है।
Vector
में स्ट्रीम फ़्यूज़न और सामान है, जो Seq
में नहीं है।
Seq
ओवर Vector
की वकालत नहीं कर रहा हूं! मुद्दा यह है कि मूल रूप से उपसर्गों को साझा करके, Seq
लगातार डेटा के साथ अधिक कुशलता से काम करने में सक्षम है जो विभाजित और/या जोड़ा जा रहा है।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
haskell
हास्केल एक कार्यात्मक प्रोग्रामिंग भाषा है जिसमें मजबूत स्थैतिक टाइपिंग, आलसी मूल्यांकन, व्यापक समानता और संक्षिप्तता समर्थन और अद्वितीय अमूर्त क्षमताओं की विशेषता है।
ST
सन्यासी का उपयोग करते हैं, तोVector
s का उत्परिवर्तन अत्यंत आसान हो जाता है।Data.Sequence
के साथ एक कुशल कतार या एक डेक लागू कर सकते हैं लेकिनData.Vector
के साथ नहीं।fmap
,<*>
, और (हाल ही में)fromFunction
में आलसी प्रदर्शन विशेषताएं हैं जिनके बारे में वेक्टर केवल सपना देख सकते हैं, और उनकेreplicate
और*>
इसके अतिरिक्त हैं, टार्डिस की तरह-अंदर से बड़ा। तोreplicate n v
केवल O(log n) समय और स्थान लेता है, और आज तक, GitHub पर*>
का संस्करण केवल O के साथ लंबाई L के अनुक्रम की N प्रतियों को चक्रित कर सकता है (लॉग N+लॉग) एल) समय और अतिरिक्त स्थान।