ในcs.stackexchangeฉันถามเกี่ยวกับห้องสมุดalgebird scala บน github โดยคาดการณ์ว่าทำไมพวกเขาอาจต้องการแพ็คเกจพีชคณิตนามธรรม
หน้า GitHub มีเบาะแสบางอย่าง:
การนำ Monoids ไปใช้สำหรับอัลกอริทึมการประมาณที่น่าสนใจเช่นตัวกรอง Bloom, HyperLogLog และ CountMinSketch สิ่งเหล่านี้ช่วยให้คุณคิดถึงการดำเนินการที่ซับซ้อนเหล่านี้เช่นคุณอาจใช้ตัวเลขและเพิ่มพวกมันใน hadoop หรือออนไลน์เพื่อสร้างสถิติและการวิเคราะห์ที่มีประสิทธิภาพ
และอีกส่วนหนึ่งของหน้า GitHub:
เดิมได้รับการพัฒนาขึ้นเป็นส่วนหนึ่งของ Matrix API ของ Scalding โดยที่ Matrices มีค่าซึ่งเป็นองค์ประกอบของ Monoids กลุ่มหรือ Rings ต่อจากนั้นเป็นที่ชัดเจนว่ารหัสมีแอปพลิเคชันที่กว้างขึ้นภายใน Scalding และโครงการอื่น ๆ ภายใน Twitter
แม้แต่ Oskar Boykin แห่ง Twitter ก็ยังได้:
คำตอบหลักคือโดยการใช้ประโยชน์จากโครงสร้างกึ่งกลุ่มเราสามารถสร้างระบบที่ขนานอย่างถูกต้องโดยไม่ทราบว่าการดำเนินการพื้นฐาน (ผู้ใช้มีความสัมพันธ์ที่มีแนวโน้ม)
โดยใช้ Monoids เราสามารถใช้ประโยชน์จาก sparsity (เราจัดการกับเมทริกซ์กระจัดกระจายจำนวนมากซึ่งค่าเกือบทั้งหมดเป็นศูนย์ใน Monoid บางส่วน)
ด้วยการใช้ Rings เราสามารถทำการคูณเมทริกซ์กับสิ่งอื่นที่ไม่ใช่ตัวเลข (ซึ่งในบางครั้งเราได้ทำ)
โครงการ algebird นั้นเอง (รวมถึงประวัติปัญหา) ค่อนข้างชัดเจนอธิบายสิ่งที่เกิดขึ้นที่นี่: เรากำลังสร้างอัลกอริทึมมากมายสำหรับการรวมชุดข้อมูลขนาดใหญ่และการใช้ประโยชน์จากโครงสร้างของการดำเนินการทำให้เราได้รับชัยชนะในระบบ (ซึ่งมักจะเป็นจุดปวดเมื่อพยายามผลิตอัลกอริทึมบน 1000s ของโหนด)
แก้ไขปัญหาของระบบเพียงครั้งเดียวสำหรับ Semigroup / Monoid / Group / Ring จากนั้นคุณสามารถเสียบอัลกอริทึมใด ๆ โดยไม่ต้องคิดถึง Memcache, Hadoop, Storm, etc ...
ตัวเลขBloom filters
/ hyperloglog
/ countminsketch
ชอบเป็นอย่างไร?
การรวมฐานข้อมูลมีโครงสร้างแบบ monoidal อย่างไร
monoid นี้มีหน้าตาเป็นอย่างไร? พวกเขาเคยมีโครงสร้างกลุ่มหรือไม่?
การอ้างอิงวรรณกรรมจะเป็นประโยชน์