我已经通过网络查看了这个答案,我得到的是两者的类似定义。这是我发现的:
单调约束具有以下属性。如果项集S违反单调约束C,则其任何子集也违反C.等价地,满足单调约束C的项集的所有超集也满足C(即,C向上关闭)。 Monotone
反单调约束具有以下不错的属性。如果项集S满足反单调约束C,则其所有子集也满足C(即,C向下关闭)。同样,违反反单调约束C的项集的任何超集也违反C. Anti-monotone
引用链接中的定义:
当且仅当对于所有项集S和S'时,约束C是单调的: 如果S S'和S违反C,那么S'违反C。
当且仅当对于所有项集S和S'时,约束C是反单调的: 如果S⊇S'和S满足C,那么S'满足C。
任何人都可以向我解释一下它们之间的区别是什么?优选地以一个例子。
答案 0 :(得分:1)
使用第一个定义,如果S违反C,它的超集可能也可能违反C但是的子集必须 ...如果S满足C,则超集其中必须也满足C,但子集可能不。
第二个定义是另一种方式......如果S违反C,它的超集必须也违反C但是子集可能不会 ......如果S满足C,它的超集可能也不满足C但是子集必须。
答案 1 :(得分:0)
我必须将示例(第一段)格式化为代码块,以便我可以发布。给您带来的不便深表歉意。
这两个陈述不相同。
根据第一个定义,让我们将“如果 S 违反 C,则 S' 违反 C”写为 (A -> B),这自动暗示了 (not B -> not A) 这是语句的另一种形式。
如果你仔细看第二个定义,它说明(not A -> not B)这自动暗示(B -> A)(这又是定义的另一种形式)。
(A -> B) 不一定意味着 (B -> A) 所以这两个陈述是不同的。
For an example. Consider-
C1 = Sum of elements is greater than 5
C2 = Sum of elements is at most 5
U(universe) = Set of non-negative real numbers
如果是 C1,
如果S违反C1,那么S'显然也违反C1(S是S'的超集)
例如。 S = {1, 2}, S' = {2}
因此 C1 是单调的。
如果是 C2,
如果S满足C2,那么S'显然也满足C2(S是S'的超集)
例如。 S = {1, 2}, S' = {2}
因此C2是反单调的。