ทฤษฎีหมวดหมู่และพีชคณิตนามธรรมเกี่ยวข้องกับการทำงานของฟังก์ชั่นที่สามารถรวมกับฟังก์ชั่นอื่น ๆ ทฤษฎีความซับซ้อนเกี่ยวข้องกับฟังก์ชันที่ยากในการคำนวณ มันแปลกสำหรับฉันที่ฉันไม่ได้เห็นใครรวมสาขาการศึกษาเหล่านี้เนื่องจากพวกเขาดูเหมือนคู่ธรรมชาติดังกล่าว มีใครทำแบบนี้มาก่อนหรือไม่
เป็นตัวอย่างที่สร้างแรงบันดาลใจลองมาดูที่ Monoids เป็นที่ทราบกันดีว่าหากการดำเนินการเป็นโมฆะเราสามารถดำเนินการขนานได้
ตัวอย่างเช่นใน Haskell เราสามารถกำหนดได้ว่าการเติมเป็น monoid เหนือจำนวนเต็มเช่นนี้:
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
แต่การทำให้ขนาน monoid นี้เหมาะสมเท่านั้นเนื่องจาก mappend ทำงานในเวลาคงที่ เกิดอะไรขึ้นถ้านี่ไม่ใช่กรณี? ตัวอย่างเช่นรายการเป็น monoids ที่ mappend ไม่ทำงานเวลาไม่แน่นอน (หรือเว้นวรรค!) ฉันเดาว่านี่คือเหตุผลว่าทำไมไม่มีฟังก์ชัน mconcat แบบขนานเริ่มต้นใน Haskell การนำไปใช้ที่ดีที่สุดนั้นขึ้นอยู่กับความซับซ้อนของ monoid
ดูเหมือนว่าควรมีวิธีที่สะดวกในการอธิบายความแตกต่างระหว่างสอง monoids จากนั้นเราควรจะสามารถใส่คำอธิบายประกอบโค้ดของเราด้วยความแตกต่างเหล่านี้และให้โปรแกรมเลือกอัลกอริธึมที่ดีที่สุดที่จะใช้โดยอัตโนมัติโดยขึ้นอยู่กับความซับซ้อนของ monoid