Хорошо известно, что моноиды потрясающе распространены в программировании. Они настолько вездесущи и настолько полезны, что я, как «хобби-проект», работаю над системой, полностью основанной на их свойствах (распределенная агрегация данных). Чтобы система была полезной, мне нужны полезные моноиды:)
Я уже знаю об этом:
- Числовая или матричная сумма
- Числовой или матричный продукт
- Минимум или максимум по итоговому заказу с верхним или нижним элементом (в более общем случае, объединение или встреча в ограниченной решетке или, в более общем смысле, продукт или сопутствующий продукт в категории)
- Установить штуцер
- Объединение карт, где конфликтующие значения объединяются с использованием моноида
- Пересечение подмножеств конечного множества (или просто установить пересечение, если мы говорим о полугруппах)
- Пересечение карт с областью ограниченного ключа (здесь тоже самое)
- Слияние отсортированных последовательностей, возможно, с объединением значений, равных ключам, в другой моноид / полугруппу
- Ограниченное объединение отсортированных списков (аналогично предыдущему, но мы берем верхний N результата)
- декартово произведение двух моноидов или полугрупп
- Список списков
- Композиция эндоморфизма.
Теперь давайте определим квази-свойство операции как свойство, которое поддерживает отношение эквивалентности. Например, конкатенация списков является квазикоммутативной, если мы считаем списки одинаковой длины или с одинаковым содержимым с точностью до перестановки эквивалентными.
Вот некоторые квазимоноиды и квазикоммутативные моноиды и полугруппы:
- Любой (a + b = a или b, если мы считаем все элементы несущей равными)
- Любой удовлетворяющий предикат (a + b = один из a и b, который является ненулевым и удовлетворяет некоторому предикату P, если ни один не делает, тогда нуль; если мы рассматриваем все элементы, удовлетворяющие P-эквиваленту)
- Ограниченная смесь случайных выборок (xs + ys = случайная выборка размера N из конкатенации xs и ys; если мы считаем эквивалентными любые две выборки с одинаковым распределением по всему набору данных)
- Ограниченная смесь взвешенных случайных выборок
- Давайте назовем это «топологическим слиянием»: с учетом двух ациклических и не противоречащих графов зависимостей, граф, который содержит все зависимости, указанные в обоих. Например, список «конкатенация», который может привести к любой перестановке, в которой элементы каждого списка следуют по порядку (скажем, 123 + 456 = 142356).
Какие еще существуют?