检查集合上的传递关系

关系是某个集合与另一个集合的笛卡尔积的子集。关系包含其定义集合中元素的有序对。要了解更多关于关系的内容,请参考“关系及其类型”这篇文章。

什么是传递关系?

集合 A 上的关系 R 被称为传递关系,当且仅当

> ∀ a, b, c ∈ A,如果 (a, b) ∈ R 且 (b, c) ∈ R,那么 (a, c) ∈ R,

> 其中 R 是 (A x A) 的子集,即集合 A 与其自身的笛卡尔积。

这意味着,如果关系 R 中存在从元素 “a” 到 “b” (aRb) 以及从 “b” 到 “c” (bRc) 的有序对,那么从元素 “a” 到 “c” (aRC) 的有序对也应该存在于关系 R 中。如果对于 R 中的任意 aRbbRc,存在任何这样的 aRc 不包含在内,则 R 不是传递关系。

示例:

> 考虑集合 A = {a, b, c}

>

> R = {(a, b), (b, c), (a, c)} 是传递关系,但是

> R = {(a, b), (b, c)} 不是传递关系

传递关系的性质

  • 任何集合上的空关系总是传递的。
  • 任何集合上的全域关系总是传递的。

如何验证传递关系?

要验证传递关系:

  • 首先,在关系中找出形式为 aRb & bRc 的元组。
  • 对于每一对这样的组合,检查 aRc 是否也存在于 R 中。
  • 如果任何一个元组不存在,则该关系不是传递的;否则,它是传递的。

请查看下方的图解以便更好地理解

图解:

> 考虑集合 R = {(1, 2), (1, 3), (2, 3), (3, 4)}

>

> 对于组合 (1, 2) 和 (2, 3)

> => 关系 (1, 3) 存在

> => 这满足条件。

>

> 对于组合 (1, 3) 和 (3, 4)

> => 关系 (1, 4) 不存在

> => 这不满足条件。

>

> 所以该关系不是传递的

下面是该思路的代码实现:

C++


CODEBLOCK_812024b1

Java


// 实现该方法的 Java 代码

import java.io.*;

import java.util.*;

class pair {

int first, second;

pair(int first, int second)

{

this.first = first;

this.second = second;

}

}

class GFG {

static class Relation {

boolean checkTransitive(Set R)

{

// 性质 1

if (R.size() == 0) {

return true;

}

// 创建一个哈希映射来存储元组作为键值对

HashMap<Integer, Set > tup

= new HashMap();

// 创建关系的哈希映射,其中 是键

// 而 (b) 是

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/52955.html
点赞
0.00 平均评分 (0% 分数) - 0