स्पष्ट रूप से Seq
सभी संभव संचालनों के लिए []
के रूप में asymptotically समान या बेहतर प्रदर्शन करता है। लेकिन चूंकि इसकी संरचना सूचियों की तुलना में अधिक जटिल है, छोटे आकारों के लिए इसके निरंतर ओवरहेड शायद इसे धीमा कर देगा। मैं कितना पता करने के लिए, विशेष रूप से करना चाहते हैं:डेटा.Sequence.Seq की तुलना में तेज़ी से कितनी तेज़ है []?
- कितना धीमी
<|
:
की तुलना में है? Seq
पर घुमावदार/ट्रैवर्सिंग[]
(फोल्डिंग/ट्रैवर्सिंग फ़ंक्शन की लागत को छोड़कर) की तुलना में कितना धीमा हो रहा है/ट्रैवर्सिंग कितना धीमा हो रहा है?- आकार (लगभग) क्या है जिसके लिए
\xs x -> xs ++ [x]
|>
से धीमा हो जाता है? - आकार (लगभग) क्या है जिसके लिए
++
><
से धीमा हो जाता है? viewl
पर कॉल करने की लागत क्या है और सूची में मिलान पैटर्न की तुलना में परिणाम पर मिलान पैटर्न क्या है?n
-elementSeq
n
-element list की तुलना में कितनी मेमोरी है? (स्मृति नहीं तत्वों, केवल संरचना के कब्जे में गिनती।)
मुझे पता है कि यह मापने के लिए, के बाद से Seq
साथ हम परिशोधित जटिलता के बारे में बात मुश्किल है, लेकिन मैं कम से कम कुछ किसी न किसी संख्या जानना चाहते हैं । http://www.haskell.org/haskellwiki/Performance#Data.Sequence_vs._lists
एक अनुक्रम बराबर सूची के रूप में ज्यादा स्थान के रूप में 5/6 और 4/3 के बीच बार का उपयोग करता है (GHC में के रूप में प्रति नोड एक शब्द का एक ओवरहेड संभालने,) -
ऐसा कोई तुलना मौजूद है लेता है। मैं सुझाव देता हूं कि इसे खुद को मानदंड बेंचमार्किंग लाइब्रेरी का उपयोग करके उत्पन्न करें। –
यदि कोई अंततः इस पर बेंचमार्किंग करने का निर्णय लेता है, तो यह तुलना के लिए 'वेक्टर' में भी गिरावट का पूरा अर्थ देगा। परिणाम देखने के लिए बहुत अच्छा होगा। इस का अनुकूलन –
यह वास्तविक कोड में भी मुश्किल है (या विशेष रूप से उपयोगी नहीं है), जीएचसी के साथ, इंटरमीडिएट सूचियों को फ़्यूज्ड और पुनः लिखित और गायब हो जाते हैं, जिससे उन्हें डेटा संरचना प्रति से अधिक नियंत्रण संरचना की तरह बना दिया जाता है। – jberryman