广工Anyview离散数学第八章

注:网络资源整理,并非本人代码,离散数学对初学者比较抽象,希望对你有所帮助。请注意对应题目,每年题目可能有小变动。

目录

试设计一算法,对于一个从集合A到集合B的二元关系R,判断R是否为函数

判断一个关系是否为函数,如果是函数,则是什么类型:单射、满射、双射、变换、非单射非满射。

判断一个关系是否为函数,如果是函数并且该函数存在逆函数,则求出其逆函数


试设计一算法,对于一个从集合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;

}

你可能感兴趣的:(离散数学,学习,算法,离散数学,广东工业大学)