C+中的半环或幺半群是否有标准的抽象+;? 是否助推或其他常见C++库提供或抽象(如模板类)?< /P>

C+中的半环或幺半群是否有标准的抽象+;? 是否助推或其他常见C++库提供或抽象(如模板类)?< /P>,c++,math,boost,monoids,C++,Math,Boost,Monoids,我有一些算法,我想用这些抽象结构来表达,但到目前为止我还没有遇到任何东西。我可以自己写,但理想情况下,这些应该放在我已经在使用的库中,比如boost 谢谢> P>我所知,C++标准库在这些结构中没有任何抽象。然而,STL的发明者Alex Stepanov写了一本书,书中他写了各种有用的函数,这些函数操作幺半群、群、二元运算符、一元函数等。这不一定是一个标准,但可能是进一步探索的良好起点 希望这有帮助 有概念。例如,函数是为MonoidOperation实现的 库还定义了 除此之外,您还可以参考A

我有一些算法,我想用这些抽象结构来表达,但到目前为止我还没有遇到任何东西。我可以自己写,但理想情况下,这些应该放在我已经在使用的库中,比如boost


谢谢

> P>我所知,C++标准库在这些结构中没有任何抽象。然而,STL的发明者Alex Stepanov写了一本书,书中他写了各种有用的函数,这些函数操作幺半群、群、二元运算符、一元函数等。这不一定是一个标准,但可能是进一步探索的良好起点

希望这有帮助

有概念。例如,函数是为MonoidOperation实现的

库还定义了

除此之外,您还可以参考Alexander Stepanov(EoP的作者之一)。 笔记免费提供,并且与EoP书籍有些重叠

EoPNotes之间存在风格差异-EoP与数学教科书非常简洁,但Notes更“非正式”-有一些小故事等

顺便说一下,两者都对上述功能实现进行了一些讨论

还有亚历山大·斯捷潘诺夫的精彩演讲:

p.p.S.

提供了一种为类定义算术运算符组的方便方法


预定义的概念(仅限于语法类型)包括环、有序环、欧几里德环、有序欧几里德环、字段和有序字段。你应该能够通过从合适的操作符类组中派生出半环或幺半群来定义你自己的类。

哇,我想我从来没有听说过这些词适用于现实生活中的问题,假设它们是专为折磨大学学生而设的+1:)@dasblinkenlight我想实现的算法之一写在Cormen等人关于半环和幺半群的算法书中:)啊,这些家伙。。。他们轻描淡写的天赋体现在将他们的书命名为“算法简介”而不是“你们大多数人都需要了解算法”::):@dasblinkenlight在并行版本的
std::acculate
,比如Cilk-reducer-hyper-objects中也会出现幺半群的概念(由这些家伙之一的Leiserson)这些不是概念,而是您所说的“算术运算符组”的助手。这个概念将包括像加法识别、乘法识别、加法识别、乘法识别等内容。@evgenypanasuk tnx,boost.operators似乎确实不提供识别元素。对于AFAICS,应该可以对他们使用相同的
friend
注射技巧。例如,let
templateclass多维:字段{}和定义混合的
运算符*
版本以反映可交换性。概念集中在接口上,即哪个语法合法,哪个语义合法。这就允许实现从具体模型中抽象出来的算法(和其他东西)。但Boost.运算符只是帮助实现具体模型的助手。@evgenypanasuk tnx,更新了答案,澄清了概念类型