是由自反闭包的定义直接证明任何关系A*A的子集R的自反闭包的存在性和唯一性.

★依诺★2022-10-04 11:39:541条回答

已提交,审核后显示!提交回复

共1条回复
木傻子 共回答了23个问题 | 采纳率91.3%
R的自反闭包是包含R的具有自反性质的最小关系.
即如果R1是R的自反闭包,则一定具有下面3个条件:
1.R1包含R(即R是R1的子集)
2.R1具有自反性质
3.对任意具有自反性质且包含R的关系Q,Q必也包含R1(即R1的最小性)
1年前

相关推荐

设集合x={a,b,c}上的关系R={(a,b),(b,c),(c,c)},求R的自反闭包r(R),对称闭包s(R)和传
设集合x={a,b,c}上的关系R={(a,b),(b,c),(c,c)},求R的自反闭包r(R),对称闭包s(R)和传递闭包t(R)
tak2001年前1
一蓑烟雨1973 共回答了22个问题 | 采纳率90.9%
(R)={(a,b),(b,c),(c,c),(a,a),(b,b)},
s(R)={(a,b),(b,a),(b,c),(c,b),(c,c)},
t(R)={(a,b),(b,c),(a,c),(c,c)},
三元组表示的矩阵的操作实现给定关系R(用矩阵表示),求R的自反闭包、对称闭包和可传递闭包.要求:(1)试试以序偶的形式输
三元组表示的矩阵的操作实现
给定关系R(用矩阵表示),求R的自反闭包、对称闭包和可传递闭包.
要求:
(1)试试以序偶的形式输入关系,转换为矩阵存储.如果不行就用矩阵直接输入.
(2)以关系和矩阵两种形式输出该关系的传递自反闭包、对称闭包和可传递闭包.
榕妃凤舞1年前1
专吃武松 共回答了17个问题 | 采纳率88.2%
我有一个可以用的.怎么给你?百度hi我吧.
算了,我贴上来吧,由电脑编程网整理:
#include
#include
#define smax 45
typedef int datatype;
typedef struct lnode //结构体和共用体的定义
{
int i,j;
struct lnode *cptr,*rptr;
union
{
struct lnode *next;
datatype v;
}uval;
}link;
int flag=0;
//建立稀疏矩阵的函数,返回十字链表头指针
link *creatlinkmat()
{
link *p,*q,*head,*cp[smax];
int i,j,k,m,n,t,s;
datatype v;
printf("输入行、列,非零元素个数(m,n,t数字间用逗号分隔)");
scanf("%d,%d,%d",&m,&n,&t);//输入行、列,非零元素个数
if(m>n)s=m; else s=n;
head=(link *)malloc(sizeof(link)); //建立十字链表头结点
head->i=m;head->j=n;
cp[0]=head; //cp[]是指针数组,分别指向头结点和行、列表头结点
for(i=1;i<=s;i++) //建立头结点循环链表
{
p=(link *)malloc(sizeof(link));
p->i=0;p->j=0;
p->rptr=p;p->cptr=p;
cp[i]=p; cp[i-1]->uval.next=p;
}
cp[s]->uval.next=head;
for(k=1;k<=t;k++)
{
printf("t 第%d个元素(行号i 列号j 值v,数字间用空格分隔):",k);
scanf("%d%d%d",&i,&j,&v);
p=(link *)malloc(sizeof(link));
p->i=i;p->j=j;p->uval.v=v;
q=cp[i];
while((q->rptr!=cp[i])&&(q->rptr->j q=q->rptr;
p->rptr=q->rptr;
q->rptr=p;
q=cp[j];
while((q->cptr!=cp[j])&&(q->cptr->i q=q->cptr;
p->cptr=q->cptr;
q->cptr=p;
}
return head;
}
//插入结点函数
void insert(int i,int j,int v,link *cp[])
{
link *p,*q;
p=(link *)malloc(sizeof(link));
p->i=i;p->j=j;p->uval.v=v;
//以下是经*p结点插入第i行链表中
q=cp[i];
while((q->rptr!=cp[i])&&(q->rptr->j q=q->rptr;//在第i行中找第一个列号大于j的结点*(q->rptr)
//找不到时,*q是该行表上的尾结点
p->rptr=q->rptr;
q->rptr=p;//*p插入在*q之后
//以下是将结点插入第j列链表中
q=cp[j];//取第j列表头结点
while((q->cptr!=cp[j])&&(q->cptr->i q=q->cptr ;//在第j行中找第一个列号大于i的结点*(q->cptr)
//找不到时,*q是该行表上的尾结点
p->cptr=q->cptr;
q->cptr=p;//*p插入在*q之后
}
//输出十字链表的函数
void print(link *a)
{
link *p,*q,*r;//p是控制行q是控制列r是控制输出的格式
int k,col,t,row;
col=a->j;//矩阵a的列数
printf("矩阵为:n");
p=a->uval.next;//p指向第一个结点(不是头结点)
while(p!=a)
{
q=p->rptr;//p指向这以一行的一个值
if(q==a->cptr)break;//如果行或列处理完了,跳出
r=p;//r指向这一行的头结点
while(q!=p)
{
for(k=1;kj-(r->j);k++)//输出同一行上两非零数据间的零
printf(" 0");
printf("%3d",q->uval.v);//输出那个非零值
q=q->rptr;//q指向这一行的下一个元素
r=r->rptr;//r指向q前面的一个非零元素
}
k=r->j;//k的值是某一行的最后一个非零元的列数
for(t=k;t printf(" 0");
printf("n");
p=p->uval.next;//p指向下一行
}
}
link *add(link *a,link *b)
{
link *p,*q,*u,*v,*r,*cp[smax],*c;//p,q控制十字链a的行列,u,v控制十字链b的行列
int s,i;
if(a->i!=b->i||a->j!=b->j)

//建立c的表头环链
c=(link *)malloc(sizeof(link));
c->i=a->i;c->j=a->j;
if(c->i>c->j)s=c->i; else s=c->j;
cp[0]=c;
for(i=1;i<=s;i++)
{
r=(link *)malloc(sizeof(link));
r->i=0;r->j=0;
r->rptr=r;r->cptr=r;
cp[i]=r;
cp[i-1]->uval.next=r;
}
cp[s]->uval.next =c;
//矩阵相加
p=a->uval.next;u=b->uval.next;
while(p!=a&&u!=b)
{
q=p->rptr;v=u->rptr;
if(q==p&&v!=u)//矩阵a中第p行为空,矩阵b的第u行不为空
while(v!=u)//将b的行的都复制到和矩阵中

else if(v==u&&q!=p)//矩阵a中第p行不为空,矩阵b的第u行为空
while(q!=p)

else if(q!=p&&v!=u)//矩阵b的第u行和矩阵a的第p行都不为空
{
while(q!=p&&v!=u)
{
if(q->jj)//如果a中有元素的列数小于b的,将a中的所有小于b的值都插到c中

else if(q->j>v->j)//如果b中有元素的列数小于a的,将a中的所有小于b的值都插到c中

else//a、b当前是在同一个位置,判断加的和是否为零,不为零才做加法运算
{if(q->uval.v+v->uval.v!=0)insert(q->i,q->j,(q->uval.v+v->uval.v),cp);
q=q->rptr;v=v->rptr;
}
}
if(q==p&&v!=u)//如果b未处理完,将b中未处理的值都插入到和矩阵中
while(v!=u)

else if(v==u&&q!=p)//如果a未处理完,将a中未处理的值都插入到和矩阵中
while(q!=p)

else; //都处理完了,什么都不做
}
else ; //矩阵b的第u行和矩阵a的第p行都为空,什么都不做

p=p->uval.next;u=u->uval.next;//a、b都指向下一行
}
return c;
}
//
void main()
{
link *a,*b,*c;
a=creatlinkmat();print(a);
b=creatlinkmat();print(b);
c=add(a,b);
if(flag==1)printf("矩阵a、b不能相加!");
else printf("和矩阵c为:n");print(c);
}
测试用例:
输入行、列,非零元素个数(m,n,t数字间用逗号分隔)2,2,4
第1个元素(行号i 列号j 值v,数字间用空格分隔):1 1 1
第2个元素(行号i 列号j 值v,数字间用空格分隔):1 2 1
第3个元素(行号i 列号j 值v,数字间用空格分隔):2 1 1
第4个元素(行号i 列号j 值v,数字间用空格分隔):2 2 1
矩阵为:
1 1
1 1
输入行、列,非零元素个数(m,n,t数字间用逗号分隔)2,2,3
第1个元素(行号i 列号j 值v,数字间用空格分隔):1 1 5
第2个元素(行号i 列号j 值v,数字间用空格分隔):1 2 5
第3个元素(行号i 列号j 值v,数字间用空格分隔):2 1 5
矩阵为:
5 5
5 0
和矩阵c为:
矩阵为:
6 6
6 1
请按任意键继续. . .
离散数学填空题填空题.1、集合A={a,b,c}上的关系R={,,}的自反闭包为_______.2、设集合X={0,1,
离散数学填空题
填空题.1、集合A={a,b,c}上的关系R={,,}的自反闭包为_______.2、设集合X={0,1,2,3},R是X上的二元关系,R={,,,,,,},则R的关系矩阵Mr是___________.3、设有函数h:A→B和k:B→C,若kh是双射,则k是_____.4、每一个良序集必为全序集,而______全序集必为良序集.5、集合B={?,},}}}的幂集为________.6、设无向图G具有割点,则G中______(是或否)一定不存在哈密尔顿圈.7、G为一简单图,有1个4度节点,3个3度节点,求该图的边数为.8、不能再分解的命题称为____________,至少包含一个联结词的命题称为____________.
浪鱼1年前2
ayumi007 共回答了22个问题 | 采纳率81.8%
1){,,,,}
2)
(1,0,1,0)
(0,0,1,1)
(1,1,0,0)
(0,0,0,1)
3)单射
4)有限
5){?,},{{?}},{{?,}}},,}},,,}}},{{?},,}}},,},,}}}}
6)否
7)(1*4+3*3)/2=算出来不是整数啊
8)简单命题,复合命题
关于 自反闭包的 证明.谢谢假定集合S上一个关系R,定义R'为:R' = R U { (s,s) ∈ S }即, R'
关于 自反闭包的 证明.谢谢
假定集合S上一个关系R,定义R'为:R' = R U { (s,s) ∈ S }
即, R' 包含 R的所有对以及(s,s).
证明 R' 是 R的自反闭包.
请问 如何证明? 我觉得这个问题 很显然啊,如何写证明过程呢?
谢谢各位了
我始终不懂1年前1
sdlylp 共回答了20个问题 | 采纳率95%
1,R包含于R',2,{ (s,s) ∈ S }包含于R',R'是自反的
3,设有R' ‘是包含R的自反关系,
对于任意的(X,Y)∈R’,(X,Y)∈R,或者(X,Y)∈ { (s,s) ∈ S },
因为R包含于R",并且因为R" 自反,{ (s,s) ∈ S }包含于R",所以R'包含于R"
,由自反闭包的定义,R'是R的自反闭包
设A={1,2,3},R是集合A上的二元关系,R={,,},判断其具有关系五个性质中的哪些性质,并求其自反闭包、对称闭包
设A={1,2,3},R是集合A上的二元关系,R={,,},判断其具有关系五个性质中的哪些性质,并求其自反闭包、对称闭包,传递闭包
喜欢的心情1年前1
suellen_f 共回答了19个问题 | 采纳率89.5%
R满足传递性
自反闭包={(12),(13),(11),(22),(3,3)}
对称闭包={(12),(21),(13),(31),(2,2)}
传递闭包={(1,2)(1,3)(2,2)}
设R是集合A上的二元关系,什么是R的自反闭包
aok883211年前1
懒猫懒狗 共回答了21个问题 | 采纳率85.7%
R的自反闭包是包含R的具有自反性质的最小关系.
即如果R1是R的自反闭包,则一定具有下面3个条件:
1.R1包含R(即R是R1的子集)
2.R1具有自反性质
3.对任意具有自反性质且包含R的关系Q,Q必也包含R1(即R1的最小性)
离散数学中的闭包运算已知一个矩阵,怎样将他变成关于他的自反闭包,对称闭包(运用对称自反的矩阵特点吗,在变成对称闭包时候0
离散数学中的闭包运算
已知一个矩阵,怎样将他变成关于他的自反闭包,对称闭包(运用对称自反的矩阵特点吗,在变成对称闭包时候0和1怎样变,是将0全部变成1还是根据矩阵的情况来定)
jlxwanxaoying1年前1
vannessa0402 共回答了17个问题 | 采纳率94.1%
自反闭包,是将矩阵主对角线上元素全变成1
对称闭包,是将矩阵非主对角线上的1元素,转置后的元素(行列交换,,即位置与主对角线对称)也变成1,0元素不要管,即根据矩阵的情况来定