Подтвердить что ты не робот

Существует ли стандартная абстракция для полукольцев или моноидов в С++?

Поддерживает ли какая-либо другая общая библиотека С++ semiring или monoid абстракции (например, класс шаблона)?

У меня есть некоторые алгоритмы, которые я хотел бы выразить в терминах этих абстрактных структур, но до сих пор я ничего не встречал. Я могу написать свой собственный, но в идеале это будет в библиотеке, которую я уже использую, например, boost.

Спасибо!

4b9b3361

Ответ 1

SGI STL имеет MonoidOperation. Например, функция power реализована для MonoidOperation.

Boost.Graph также определяет Концепция моноида.

В дополнение к уже предложенному Элементы программирования вы можете посмотреть Примечания по программированию Александра Степанова (один из авторов EoP). Примечания свободно доступны и имеют некоторое совпадение с книгой EoP.

Есть разница в стиле между EoP и Notes - EoP очень сложная, как математический учебник, но Примечания более "неофициальные" - там небольшие истории и т.д.

Кстати, у обоих есть некоторое обсуждение упомянутой выше функции power.

P.S. великие переговоры Александра Степанова:

P.P.S. Сборник статей Александра Степанова

Ответ 2

Насколько я знаю, стандартная библиотека С++ не имеет абстракций вокруг этих структур. Однако Алекс Степанов, изобретатель STL, написал книгу под названием Elements of Programming, в которой он пишет множество полезных функций, которые работают на моноидах, группы, двоичные операторы, унарные функции и т.д. Это не обязательно стандарт, но это может быть хорошей отправной точкой для дальнейшего изучения.

Надеюсь, это поможет!

Ответ 3

Boost.Operators предоставляет удобный способ определения групп арифметических операторов для класса.

Предварительно определенные понятия (только синтаксический утиный набор) включают кольцо, упорядоченное кольцо, евклидово кольцо, упорядоченное евклидово кольцо, поле и упорядоченное поле. Вы должны иметь возможность определять свои собственные классы для полукольца или моноида, получая из соответствующих групп классов операторов.