श्रेणी के सिद्धांत और सार बीजगणित जिस तरह से कार्य करता है उसे अन्य कार्यों के साथ जोड़ा जा सकता है। जटिलता सिद्धांत इस बात से संबंधित है कि किसी फ़ंक्शन की गणना करना कितना कठिन है। यह मेरे लिए अजीब है कि मैंने किसी को भी अध्ययन के इन क्षेत्रों से जोड़कर नहीं देखा, क्योंकि वे इस तरह के प्राकृतिक जोड़े लगते हैं। क्या किसी ने इसे पहले किया है?
एक प्रेरक उदाहरण के रूप में, आइए एक नज़र डालते हैं। यह अच्छी तरह से ज्ञात है कि यदि एक ऑपरेशन एक मोनॉयड है, तो हम ऑपरेशन को समानांतर कर सकते हैं।
हास्केल में उदाहरण के लिए, हम तुच्छ रूप से परिभाषित कर सकते हैं कि इस तरह पूर्णांक पर एक मोनोड है:
instance Monoid Int where
mempty = 0
mappend = (+)
अब अगर हम 0 से 999 तक की राशि की गणना करना चाहते हैं, तो हम इसे क्रमिक रूप से कर सकते हैं:
foldl1' (+) [0..999]
या हम इसे समानांतर में कर सकते हैं
mconcat [0..999] -- for simplicity of the code, I'm ignoring that this doesn't *actually* run in parallel
लेकिन इस मोनॉइड को समानांतर करने से ही समझ में आता है क्योंकि मैपेंड निरंतर समय में चलता है। अगर ऐसा नहीं होता तो क्या होता? उदाहरण के लिए, सूची वे मोनॉयड हैं जहां मैपेंड अनिश्चित समय (या स्थान!) नहीं चलाते हैं। मैं यह अनुमान लगा रहा हूं कि हास्केल में कोई डिफ़ॉल्ट समानांतर mconcat फ़ंक्शन क्यों नहीं है। सबसे अच्छा कार्यान्वयन मोनॉइड की जटिलता पर निर्भर करता है।
ऐसा लगता है कि इन दो monoids के बीच अंतर का वर्णन करने के लिए एक सुविधाजनक तरीका होना चाहिए। फिर हमें इन अंतरों के साथ अपने कोड को एनोटेट करने में सक्षम होना चाहिए और एक मोनोड की जटिलता के आधार पर प्रोग्राम को स्वचालित रूप से उपयोग करने के लिए सबसे अच्छा एल्गोरिदम चुनना चाहिए।