मैं Data.Sequence का काफी प्रशंसक रहा हूं . लेकिन जैसा कि मैं Data.Vector के बारे में सीख रहा हूं। , ऐसा लगता है कि यह सब कुछ कर सकता है Data.Sequence कर सकता है, लेकिन बेहतर, साथ ही यह अधिक सामान कर सकता है। क्या हमें डेटा को हटा देना चाहिए। अनुक्रम और प्रचार डेटा। वेक्टर? क्या डेटा का उपयोग करने के कोई अच्छे कारण हैं। डेटा पर अनुक्रम। वेक्टर?

20
Dan Burton 4 नवम्बर 2011, 21:16

2 जवाब

सबसे बढ़िया उत्तर

इनमें से कोई भी डेटा संरचना दूसरे को प्रतिस्थापित नहीं कर सकती है; Data.Sequence और Data.Vector वास्तव में अनुक्रमों का प्रतिनिधित्व करने के लिए उपलब्ध डेटा संरचनाओं के बिल्कुल विपरीत छोर पर हैं।

  • Data.Vector तत्वों का एक सन्निहित सरणी है। इसका मतलब है छोटी मेमोरी फ़ुटप्रिंट और O(1) लुकअप लेकिन भयानक म्यूटेशन, कॉन्सटेनेशन और कॉपी (O(n) प्रत्येक)। (यदि आप दृढ़ता छोड़ देते हैं तो उत्परिवर्तन ओ (1) हो सकता है।)
  • दूसरी ओर Data.Sequence एक विशुद्ध रूप से कार्यात्मक वृक्ष है। इसका मतलब है उच्च स्मृति उपयोग और कम इलाके, लेकिन यह तेजी से पहुंच और उत्परिवर्तन ओ (लॉग एन) और भयानक संयोजन ओ (लॉग (मिनट (एन 1, एन 2)) और प्रतिलिपि का समर्थन करता है।

डेटा संरचना का चुनाव वास्तव में यहां काम पर निर्भर करता है।

  • तत्वों की बड़ी धाराओं को रैखिक फैशन में या यादृच्छिक लुकअप के साथ संसाधित करना Data.Vector के साथ सबसे अच्छा किया जाता है।
  • यदि आपको अपने तत्वों को विभाजित करने, संयोजित करने और बदलने की आवश्यकता है, तो Data.Sequence का उपयोग करें।
36
Heinrich Apfelmus 5 नवम्बर 2011, 11:46
2
वास्तव में, यदि आप ST सन्यासी का उपयोग करते हैं, तो Vectors का उत्परिवर्तन अत्यंत आसान हो जाता है।
 – 
fuz
5 नवम्बर 2011, 00:16
एक सरल उदाहरण, आप Data.Sequence के साथ एक कुशल कतार या एक डेक लागू कर सकते हैं लेकिन Data.Vector के साथ नहीं।
 – 
shhyou
10 सितंबर 2014, 17:42
अनुक्रम छोटे टुकड़े के आकार में विभाजन (सिर्फ टुकड़ा करने के लिए नहीं) लघुगणक भी प्रदान करते हैं। उनके fmap, <*>, और (हाल ही में) fromFunction में आलसी प्रदर्शन विशेषताएं हैं जिनके बारे में वेक्टर केवल सपना देख सकते हैं, और उनके replicate और *> इसके अतिरिक्त हैं, टार्डिस की तरह-अंदर से बड़ा। तो replicate n v केवल O(log n) समय और स्थान लेता है, और आज तक, GitHub पर *> का संस्करण केवल O के साथ लंबाई L के अनुक्रम की N प्रतियों को चक्रित कर सकता है (लॉग N+लॉग) एल) समय और अतिरिक्त स्थान।
 – 
dfeuer
11 मार्च 2015, 21:24

उपसर्ग साझा करना ऐसा लगता है जैसे Seq Vector से बेहतर है। snoc को Vector को O(n) है।

1
Anthony 4 नवम्बर 2011, 21:21
खैर, Vector में स्ट्रीम फ़्यूज़न और सामान है, जो Seq में नहीं है।
 – 
fuz
4 नवम्बर 2011, 21:44
1
मैं निश्चित रूप से Seq ओवर Vector की वकालत नहीं कर रहा हूं! मुद्दा यह है कि मूल रूप से उपसर्गों को साझा करके, Seq लगातार डेटा के साथ अधिक कुशलता से काम करने में सक्षम है जो विभाजित और/या जोड़ा जा रहा है।
 – 
Anthony
4 नवम्बर 2011, 22:38
1
@FUZxxl: स्ट्रीम फ्यूजन के साथ भी, ज्यादातर मामलों में स्नोक और विपक्ष को पूरे सरणी को वेक्टर के साथ कॉपी करने की आवश्यकता होगी, जो डेटा के मामले में नहीं है। अनुक्रम।
 – 
John L
5 नवम्बर 2011, 04:54