注:网络资源整理,并非本人代码,离散数学对初学者比较抽象,希望对你有所帮助。请注意对应题目,每年题目可能有小变动。
目录
试设计一算法,对于一个从集合A到集合B的二元关系R,判断R是否为函数
判断一个关系是否为函数,如果是函数,则是什么类型:单射、满射、双射、变换、非单射非满射。
判断一个关系是否为函数,如果是函数并且该函数存在逆函数,则求出其逆函数
boolean IsSet(pOriginalSet pSetA,pOriginalSetElem pE)//判断元素是否已经在集合内
{ resetOriginalSet( pSetA);
pOriginalSetElem p;
while (!isEndOfOriginalSet(pSetA) )
{ p=getCurrentOriginalSetElem(pSetA);
if( isEqualOriginalSetElem(p, pE) )return true;
nextOriginalSetPos(pSetA);
}
return false;
}
boolean isFunction( pOriginalSet pA,pOriginalSet pB,pCartersianSet pR )
{
int i=0,j=0;
pOrderedCouple a,b;
pOriginalSetElem c,d,c1,d1;
pOriginalSetElem g,g1;
pOrderedCouple f;
resetOriginalSet(pA);
pOriginalSet pf= createNullOriginalSet() ;
resetCartersianSet( pR);
while( !isEndOfCartersianSet(pR) )//判断关系pR中序偶第一个元素是否在集合pA内
{
b=getCurrentCartersianSetElem(pR);
d=getFirstElemOfOrderedCouple(b) ;
if(IsSet(pf,d)){i=1; break; }
else
elemInsertToOriginalSet(pf, d);
nextCartersianSetPos(pR);
}
if(i==1)return false;
while(!isEndOfOriginalSet(pA) )
{
g= getCurrentOriginalSetElem(pA) ;
i=0;
j=0;
resetCartersianSet( pR);
while( !isEndOfCartersianSet(pR) )
{
b=getCurrentCartersianSetElem(pR);
d=getFirstElemOfOrderedCouple(b) ;
d1=getSecondElemOfOrderedCouple(b) ;
if((!IsSet(pA,d)&&!IsSet(pB,d))||(!IsSet(pA,d1)&&!IsSet(pB,d1)))return false;//若关系pR内的序偶元素均不在集合pA、pB内时
if(isEqualOriginalSetElem(g, d) )//当序偶第一个元素在集合pA时
{
j=1;
i++;
if(i==2)return false;
resetOriginalSet(pB);
while(!isEndOfOriginalSet(pB) )
{
g1= getCurrentOriginalSetElem(pB) ;
if( isEqualOriginalSetElem(g1, d1) ){break;}
nextOriginalSetPos( pB);
}
if(isEndOfOriginalSet(pB)) return false;
}
nextCartersianSetPos(pR);
}
nextOriginalSetPos( pA);
if(j==0)return false;
if(i!=1)return false;
}
return true;
}
boolean IsCompoundSet(pOriginalSet pC ,pOriginalSet pO)
{ int i=0,j=0,k=0,h=0;
resetOriginalSet(pC);
resetOriginalSet(pO);
pOriginalSetElem pa,pb;
while (!isEndOfOriginalSet(pO) ){h++ ; nextOriginalSetPos(pO) ;}
resetOriginalSet(pC);
while( !isEndOfOriginalSet(pC))
{
k++;
i=0;
pa= getCurrentOriginalSetElem(pC);
resetOriginalSet(pO);
while (!isEndOfOriginalSet(pO) )
{
pb= getCurrentOriginalSetElem(pO);
if( isEqualOriginalSetElem(pa, pb)){i=1;break;}
nextOriginalSetPos(pO);
}
if(i==0)break;
nextOriginalSetPos(pC);
}
if(i==1&&h==k)return true;
return false;
}
boolean IsSet(pOriginalSet pSetA,pOriginalSetElem pE)
{ resetOriginalSet( pSetA);
pOriginalSetElem p;
while (!isEndOfOriginalSet(pSetA) )
{ p=getCurrentOriginalSetElem(pSetA);
if( isEqualOriginalSetElem(p, pE) )return true;
nextOriginalSetPos(pSetA);
}
return false;
}
boolean isFunction( pOriginalSet pA,pOriginalSet pB, pCartersianSet pR )
{
int i=0,j=0,k;
pOrderedCouple a,b;
pOriginalSetElem c,d,c1,d1;
pOriginalSetElem g,g1;
pOrderedCouple f;
resetOriginalSet(pA);
pOriginalSet pf= createNullOriginalSet() ;
resetCartersianSet( pR);
while( !isEndOfCartersianSet(pR) )//判断关系pR中序偶第一个元素是否在集合pA内
{
b=getCurrentCartersianSetElem(pR);
d=getFirstElemOfOrderedCouple(b) ;
if(IsSet(pf,d)){i=1; break; }
else
elemInsertToOriginalSet(pf, d);
nextCartersianSetPos(pR);
}
if(i==1)return false;
resetOriginalSet( pA);
while( !isEndOfOriginalSet(pA) )
{
g1= getCurrentOriginalSetElem(pA);
if(!IsSet(pf,g1)){break;return false;}
nextOriginalSetPos( pA);
}
while(!isEndOfOriginalSet(pA) )
{
g= getCurrentOriginalSetElem(pA) ;
i=0;
j=0;
resetCartersianSet( pR);
while( !isEndOfCartersianSet(pR) )
{
b=getCurrentCartersianSetElem(pR);
d=getFirstElemOfOrderedCouple(b) ;
d1=getSecondElemOfOrderedCouple(b) ;
if((!IsSet(pA,d)&&!IsSet(pB,d))||(!IsSet(pA,d1)&&!IsSet(pB,d1)))return false;//若关系pR内的序偶元素均不在集合pA、pB内时
if(isEqualOriginalSetElem(g, d) )//当序偶第一个元素在集合pA时
{
j=1;
i++;
if(i==2)return false;
resetOriginalSet(pB);
while(!isEndOfOriginalSet(pB) )
{
g1= getCurrentOriginalSetElem(pB) ;
if( isEqualOriginalSetElem(g1, d1) ){break;}
nextOriginalSetPos( pB);
}
if(isEndOfOriginalSet(pB)) return false;
}
nextCartersianSetPos(pR);
}
nextOriginalSetPos( pA);
if(j==0)return false;
if(i!=1)return false;
}
return true;
}
Function_Type functionKind( pOriginalSet pA, pOriginalSet pB, pCartersianSet pR )
{
if(isNullCartersianSet(pR)&&isNullOriginalSet(pA)&&isNullOriginalSet(pB)) return TRANSFORM;
if(!isFunction(pA,pB,pR))return NOT_FUNTION;
pOrderedCouple a,b;
pOriginalSetElem c,d,c1,d1;
pOriginalSetElem g,g1;
pOrderedCouple f;
resetOriginalSet( pA);
int i=1,j=0,k=0,h=0;
pOriginalSetElem p;
pOriginalSet pf= createNullOriginalSet() ;
resetCartersianSet( pR);
while( !isEndOfCartersianSet(pR) )
{ b=getCurrentCartersianSetElem(pR);
d=getSecondElemOfOrderedCouple(b) ;
if(IsSet(pf,d)){i=0; }
else
elemInsertToOriginalSet(pf, d);
nextCartersianSetPos(pR);
}
if(IsCompoundSet( pf,pB)) {j=1; }
if(i!=1&&j!=1)return COMMON_FUNCTION;
if(i==1&&j==1){k=1; }
resetOriginalSet( pA);
resetOriginalSet( pB);
if(IsCompoundSet( pA,pB)&&k==1)h=1;
if(i==1&&j!=1)return INJECTIVE;
if(j==1&&i!=1)return SURJECTIVE ;
if(k==1&&!IsCompoundSet( pA,pB))return BIJECTIVE;
if(h==1)return TRANSFORM;
}
boolean IsCompoundSet(pOriginalSet pC ,pOriginalSet pO)
{ int i=0,j=0,k=0,h=0;
resetOriginalSet(pC);
resetOriginalSet(pO);
pOriginalSetElem pa,pb;
while (!isEndOfOriginalSet(pO) ){h++ ; nextOriginalSetPos(pO) ;}
resetOriginalSet(pC);
while( !isEndOfOriginalSet(pC))
{
k++;
i=0;
pa= getCurrentOriginalSetElem(pC);
resetOriginalSet(pO);
while (!isEndOfOriginalSet(pO) )
{
pb= getCurrentOriginalSetElem(pO);
if( isEqualOriginalSetElem(pa, pb)){i=1;break;}
nextOriginalSetPos(pO);
}
if(i==0)break;
nextOriginalSetPos(pC);
}
if(i==1&&h==k)return true;
return false;
}
boolean IsSet(pOriginalSet pSetA,pOriginalSetElem pE)
{ resetOriginalSet( pSetA);
pOriginalSetElem p;
while (!isEndOfOriginalSet(pSetA) )
{ p=getCurrentOriginalSetElem(pSetA);
if( isEqualOriginalSetElem(p, pE) )return true;
nextOriginalSetPos(pSetA);
}
return false;
}
boolean isFunction( pOriginalSet pA,pOriginalSet pB, pCartersianSet pR )
{ int i=0,j=0;
pOrderedCouple a,b;
pOriginalSetElem c,d,c1,d1;
pOriginalSetElem g,g1;
pOrderedCouple f;
resetOriginalSet(pA);
pOriginalSet pf= createNullOriginalSet() ;
resetCartersianSet( pR);
while( !isEndOfCartersianSet(pR) )
{ b=getCurrentCartersianSetElem(pR);
d=getFirstElemOfOrderedCouple(b) ;
if(IsSet(pf,d)){i=1; break; }
else
elemInsertToOriginalSet(pf, d);
nextCartersianSetPos(pR);
}
if(i==1)return false;
while(!isEndOfOriginalSet(pA) )
{ g= getCurrentOriginalSetElem(pA) ;
i=0;
j=0;
resetCartersianSet( pR);
while( !isEndOfCartersianSet(pR) )
{ b=getCurrentCartersianSetElem(pR);
d=getFirstElemOfOrderedCouple(b) ;
d1=getSecondElemOfOrderedCouple(b) ;
if((!IsSet(pA,d)&&!IsSet(pB,d))||(!IsSet(pA,d1)&&!IsSet(pB,d1)))return false;
if(isEqualOriginalSetElem(g, d) )
{
j=1;
i++;
if(i==2)return false;
resetOriginalSet(pB);
while(!isEndOfOriginalSet(pB) )
{
g1= getCurrentOriginalSetElem(pB) ;
if( isEqualOriginalSetElem(g1, d1) ){break;}
nextOriginalSetPos( pB);
}
}
nextCartersianSetPos(pR);
}
nextOriginalSetPos( pA);
if(j==0)return false;
if(i!=1)return false;
}
return true;
}
boolean functionKind( pOriginalSet pA, pOriginalSet pB, pCartersianSet pR )
{
if(!isFunction(pA,pB,pR))return false ;
pOrderedCouple a,b;
pOriginalSetElem c,d,c1,d1;
pOriginalSetElem g,g1;
pOrderedCouple f;
resetOriginalSet( pA);
int i=1,j=0,k=0,h=0;
pOriginalSetElem p;
pOriginalSet pf= createNullOriginalSet() ;
resetCartersianSet( pR);
while( !isEndOfCartersianSet(pR) )
{ b=getCurrentCartersianSetElem(pR);
d=getSecondElemOfOrderedCouple(b) ;
if(IsSet(pf,d)){i=0; }
else
elemInsertToOriginalSet(pf, d);
nextCartersianSetPos(pR);
}
if(IsCompoundSet( pf,pB)) {j=1; }
if(i==1&&j==1)
return true;
}
pCartersianSet inverseFunction( pOriginalSet pA,pOriginalSet pB, pCartersianSet pR )
{
if(isNullCartersianSet(pR)&&isNullOriginalSet(pA)&&isNullOriginalSet(pB)) return pR;
if(!functionKind( pA, pB, pR ))return NULL;
pOrderedCouple pa;
pCartersianSet pf=createNullCartersianSet() ;
pOrderedCouple a,b;
pOriginalSetElem c,d,c1,d1;
pOriginalSetElem g,g1;
pOrderedCouple f;
resetOriginalSet(pA);
resetCartersianSet( pR);
while( !isEndOfCartersianSet(pR) )
{ b=getCurrentCartersianSetElem(pR);
d=getFirstElemOfOrderedCouple(b) ;
d1=getSecondElemOfOrderedCouple(b) ;
pa=createOrderedCouple(d1, d) ;
OrderedCoupleInsertToCartersianSet(pf, pa);
nextCartersianSetPos(pR);
}
return pf;
}