বিভাগের তত্ত্ব এবং বিমূর্ত বীজগণিতের কাজগুলি যেভাবে অন্যান্য ক্রিয়াকলাপের সাথে ফাংশনগুলিকে একত্রিত করা যায় তার সাথে ডিল করে। জটিলতা তত্ত্বটি কার্যকারিতা গণনা করা কতটা কঠিন তা নিয়ে কাজ করে। এটা আমার কাছে খুব অদ্ভুত যে আমি পড়াশোনার এই ক্ষেত্রগুলিকে কেউ একত্রিত করতে দেখিনি, কারণ তারা এ জাতীয় প্রাকৃতিক জোড়া বলে মনে হয়। এর আগে কি কেউ এটি করেছে?
একটি অনুপ্রেরণামূলক উদাহরণ হিসাবে, চলুন monoids এক নজর করা যাক। এটি সুপরিচিত যে কোনও অপারেশন যদি একঘেয়েমি হয় তবে আমরা অপারেশনটিকে সমান্তরাল করতে পারি।
উদাহরণস্বরূপ হাস্কেল, আমরা তুচ্ছভাবে সংজ্ঞা দিতে পারি যে সংযোজনগুলি এর মতো পূর্ণসংখ্যার চেয়ে একরকম:
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
তবে এই মনোডকে সমান্তরাল করে তোলা অর্থপূর্ণ কারণ কেবল ম্যাপেন্ড ধ্রুব সময়ে চালিত হয়। যদি এই ঘটনা না হত? উদাহরণস্বরূপ, তালিকাগুলি হ'ল মনোয়েড যেখানে ম্যাপেন্ড অসম্পূর্ণ সময় (বা স্থান!) চালায় না। আমি অনুমান করছি এই কারণেই হাস্কেলের কোনও ডিফল্ট সমান্তরাল ম্যাকনক্যাট ফাংশন নেই। সর্বোত্তম বাস্তবায়ন মনোয়েডের জটিলতার উপর নির্ভর করে।
দেখে মনে হচ্ছে এই দুটি মনোয়েডের মধ্যে পার্থক্য বর্ণনা করার মতো কোনও সুবিধাজনক উপায় থাকা উচিত। এরপরে আমাদের এই কোডগুলি এই পার্থক্যগুলির সাথে বর্ণনা করতে সক্ষম হওয়া উচিত এবং মনিয়েডের জটিলতার উপর নির্ভর করে প্রোগ্রামগুলি স্বয়ংক্রিয়ভাবে সেরা অ্যালগরিদমগুলি বেছে নিতে পারি।