PartialOrdering, StrictWeakOrdering, TotalOrdering, в чем основное отличие в приложении

[Официальный документ SGI]

Из-за нерефлексивности и транзитивности оператор <всегда удовлетворяет определению частичного упорядочения. Определение строгого слабого порядка является более строгим, а определение полного порядка - еще более строгим.

И я также прочитал определение строгого слабого порядка в документе: StrictWeakOrdering

Первые три аксиомы, нерефлексивность, антисимметрия и транзитивность, являются определением частичного упорядочения; Транзитивность эквивалентности требуется по определению строгого слабого порядка. Тотальный порядок - это тот, который удовлетворяет еще более строгому условию: эквивалентность должна совпадать с равенством.

Я не совсем уверен в этом определении. Некоторые основные вопросы:

1. Частичное упорядочение неявно определяет эквивалентность?

2. Как насчет строгого слабого заказа и полного заказа?

3.STL требует строгого слабого упорядочения в алгоритмах сортировки, почему не частичное или полное упорядочение? Для этого вопроса я прочитал некоторые учебники, которые доказывают, что действительные правила сравнения доказывают, что правило удовлетворяет трем аксиомам: нерефлексивность, антисимметрия, транзитивность, которая является определением для частичного упорядочения, и документ ссылается на то, что оператор <всегда удовлетворяет этому определению, поэтому почему мы не можем просто сравнить объекты, используя частичное упорядочение или, что то же самое, используя оператор

1 ответ

Решение

Частичное упорядочение, по сути, <=, Если оба a <= b а также b <= a тогда вы можете сказать, что a эквивалентно b, Но также возможно, что ни a <= b ни b <= a - эти два элемента несопоставимы. В результате вы не можете навязать общий заказ (например, std::sort потребуется) на множестве с частичным отношением порядка - в лучшем случае вы можете сделать топологическую сортировку. Вы также не можете получить отношение эквивалентности - опять же, могут быть элементы, которые несопоставимы.

Строгий слабый порядок как <, Это не позволяет иметь оба a < b а также b < aи если нет a < b ни b < aВы можете просто произнести a а также b эквивалент.

Полное упорядочение - это просто строгое слабое упорядочение, когда два элемента эквивалентны тогда и только тогда, когда они равны (что имеет смысл только в том случае, если у вас есть предикат сравнения равенства в дополнение к предикату less-than, и нет стандартного библиотечного алгоритма C++, который использует оба в то же время, поэтому проблема в значительной степени спорная в этом контексте).

Другие вопросы по тегам