2011-09-02 11 views
7

Data.Array की documentation पढ़ता है:डेटा कितना तेज़ है। ऐरे?

हास्केल इंडेक्सेबल सरणियों, जो कार्यों जिनके डोमेन पूर्णांकों से सटे सबसेट isomorphic को कर रहे हैं के बारे में सोचा जा सकता है प्रदान करता है। इस तरह से प्रतिबंधित कार्यों को कुशलता से कार्यान्वित किया जा सकता है; विशेष रूप से, एक प्रोग्रामर अपेक्षाकृत घटकों तक पहुंच की अपेक्षा कर सकता है।

मुझे आश्चर्य है कि (!) और (//) कितनी तेजी से हो सकता है। क्या मैं इनसे ओ (1) जटिलता की अपेक्षा कर सकता हूं, जैसा कि मैं उनके अनिवार्य समकक्षों से करता हूं?

उत्तर

5

सामान्य रूप से, हाँ, आपको 0 (1) ! से ओ (1) की उम्मीद करने में सक्षम होना चाहिए हालांकि मुझे यकीन नहीं है कि मानक द्वारा गारंटी दी गई है या नहीं।

यदि आप तेजी से सरणी चाहते हैं तो भी वेक्टर पैकेज देखना चाहते हैं (स्ट्रीम संलयन के उपयोग के माध्यम से)। यह भी बेहतर डिजाइन किया गया है।

ध्यान दें कि // शायद ओ (एन) है हालांकि इसे सूची को पार करना है (बस एक अनिवार्य कार्यक्रम की तरह)। यदि आपको बहुत सारे उत्परिवर्तन की आवश्यकता है तो आप MArray या MVector का उपयोग कर सकते हैं।

+1

'(//) 'वास्तव में array_ के _size में linar है, क्योंकि इसे सरणी की एक नई प्रतिलिपि बनाना है। म्यूटेबल सरणी का उपयोग करते हुए, हालांकि, मैं उम्मीदों की संख्या में रैखिक होने की अपेक्षा करता हूं। – hammar

+0

@hammar यह दोनों में रैखिक है, क्योंकि इसे सूची में सरणी के साथ-साथ पुनरावृत्ति की प्रतिलिपि बनाना चाहिए। // बल्कि बेकार है, हालांकि, एक मैरे में क्योंकि आपको थोक अद्यतन कार्यक्षमता की आवश्यकता नहीं है। – alternative

+0

हां, ज़ाहिर है। हालांकि, यह वास्तव में महत्वपूर्ण है यदि आप कुछ तत्वों को एक से अधिक बार अपडेट कर रहे हैं। – hammar

संबंधित मुद्दे