总的,弱的,部分的排序 - 完整的定义

时间:2013-02-18 14:05:18

标签: language-agnostic strict-weak-ordering

之间有什么区别
  • 严格/非严格的订购,
  • 弱/非弱排序,
  • 部分/总订购?

2 个答案:

答案 0 :(得分:6)

X 成为一个集合。关系< ⊆ X × X 部分排序,如果

  • 对于所有 x X ,我们永远不会有 x < X

  • 每当 x < y ,我们永远不会 y < x

  • 每当 x < y y < z ,我们有 x < ž

总排序是具有附加属性的部分排序,对于任何两个 x y ,我们只有一个 X < y y < x x = y

X 上的弱排序是(据我所知)部分排序<具有附加属性,即商集 X /〜上的诱导排序是总排序,其中[ x ] = [ y ]∈ X /〜当且仅当 x < y y < x 保留在 X

换句话说,在部分排序中,可以比较一些元素,并且如果可以进行比较,则排序是一致的。部分排序的例子:

  • 集合 X 的正确子集,其中 A < B 表示 A B

  • a 的自然数< b 表示“ a 划分 b ”。

  • C ++中的模板专业化。

总排序是一个所有元素,一次排列,形成一个统一的顺序。

如果您愿意将多个元素放在一起并将它们视为等同于订购目的,那么弱排序就是总排序。


术语“严格”是指使用“<”作为一种定义关系,而不是“≤”。您可以看到如何根据≤重写所有定义很容易,例如:在部分排序中,我们总是有 x ≤x等


以下是两个C ++模板特化的示例。当然,两者都是部分订购的,但第一种也是完全有序的。

示例#1:

template <typename T> struct Foo {};               // A1
template <typename U> struct Foo<U*> {};           // A2
template <> struct Foo<int*> {};                   // A3

这些专业化完全按照A3&lt; A2&lt; A1,其中“&lt;”意思是“比专业更专业。”

示例#2:

template <typename T1, typename T2> struct Bar {}; // B1
template <typename U> struct Bar<int, U> {};       // B2a
template <typename V> struct Bar<V, int> {};       // B2b
template <> struct Bar<int, int> {};               // B3

这一次,我们有B3&lt; B2b&lt; B1和B3&lt; B2a&lt; B1,但B2a和B2b 可比较。

在C ++中,这表现在以下方面:如果没有定义专门化B3,那么尝试实例化Bar<int, int>会导致编译器错误,因为没有明确的“最专业”专门化。

部分有序集合可以包含许多“最少”元素和“最大”元素,因为这些概念只能说出可比较的元素。在B1,B2a和B2b中,B2a和B2b都是“最少元素”,因为没有更小的元素。尽管如此,没有一个独特的最小元素。

答案 1 :(得分:0)

简单地说,严格的弱排序被定义为定义(可计算的)等价关系的排序。等价类按严格的弱排序排序:严格的弱排序是等价类的严格排序

部分排序(不是严格的弱排序)没有定义等价关系,因此使用“等效元素”概念的任何规范对于严格的弱排序都是没有意义的。所有STL关联容器在某些时候使用这个概念,因此所有这些规范在严格的弱排序中都没有意义。

因为部分排序(不是严格的弱排序)没有定义任何严格排序,所以你不能根据部分排序在公共sens中“排序元素”(你所能做的只是一个“拓扑排序”,它具有较弱的属性)。

鉴于

  • 数学集S
  • <
  • 的部分排序S
  • x
  • 中的值S

您可以定义S的分区(S的每个元素都在L(x)I(x)G(x)中:

L(x) = { y in S | y<x }
I(x) = { y in S | not(y<x) and not(x<y) }
G(x) = { y in S | x<y }

 L(x) : set of elements less than x
 I(x) : set of elements incomparable with x
 G(x) : set of elements greater than x

对序列中的每个<按照x iff 对序列进行排序,L(x)的元素首先出现在序列中,然后是元素I(x),后跟G(x)的元素。

对于序列中另一个元素y之后出现的每个元素x,序列在拓扑上排序 iff y不小于{{1 }}。这是一个比排序更弱的约束。

证明x的每个元素都小于L(x)的任何元素都是微不足道的。 G(x)的元素与L(x)的元素之间,或I(x)的元素与I(x)的元素之间没有一般关系。但是,如果G(x)是严格弱关系,则<的每个元素都小于L(x)的任何元素,并且I(x)的任何元素都小于任何元素I(x)

如果G(x)是严格弱关系,<x<y的任何元素都小于任何元素L(x) U I(x):任何元素不大于I(y) U G(y) }小于任何不小于x的元素。 这不适用于部分订购。