离散 单射 满射 双射

离散 单射 满射 双射单射双射满射阐述一下什么是单射,双射,满射1.单射:对于每一个不同的x都有不同的y,即x1!=x2–>y1!+y2条件:|X|<=|Y|2.满射:对于每一个y都有x与之对应条件:|Y|<=|X|3.双射:既是单射又是满射条件:|X|=|Y|代码实现通过map函数建立映射1.单射:map<int,int>BuildInjection(vector<int>src,vector<int>dst){map&l

大家好,又见面了,我是你们的朋友全栈君。

单射 双射 满射

阐述一下什么是单射,双射,满射
1.单射: 对于每一个不同的x都有不同的y,即 x1!=x2–>y1!+y2
条件:|X|<=|Y|
2.满射:对于每一个y都有x与之对应
条件:|Y|<=|X|
3.双射:既是单射又是满射
条件:|X|=|Y|

代码实现

通过map函数建立映射
1.单射:

map<int, int> BuildInjection(vector<int> src, vector<int> dst)
{ 
   
    map<int, int> injection;
    for (int i = 0; i < src.size(); ++i) { 
   
        injection[src[i]]=dst[i];
    }
    return injection;
}

因为是单射,所以|X|<|Y|,我们通过map函数建立键值对,来实现函数中的映射关系,所以我们形成映射的时候,只需要对于每一个X都有不同的Y即可,所以我们通过for循环,因为X<Y,所以取X的size(),为临界点,插入键值对。
2.满射:

map<int, int> BuildSurjection(vector<int> src, vector<int> dst)
{ 
   
    map<int, int> surjection;
    for (int i = 0; i < dst.size(); ++i) { 
   
        surjection[src[i]]=dst[i];
    }
    return surjection;
}

同理,通过src作为临界点进行便利
3.双射:

map<int, int> BuildBijection(vector<int> src, vector<int> dst)
{ 
   
    map<int, int> bijection;
    vector<int>::iterator iter;
    vector<int>::iterator iter1;
    for(iter=src.begin(),iter1=dst.begin();iter!=src.end()&&iter1!=dst.end();iter++,iter1++){ 
   
        bijection[*iter]=*iter1;
    }
    return bijection;
}

双射就是一 一对应,每一个都不能有重复,所以通过迭代器的++来输入不同的键值对。

判断是否是单射,满射,双射

1.验证单射:

bool ValidateInjection(vector<int> src, vector<int> dst, map<int, int> injection)
{ 
   
    bool bIsInjection = false;
    int size1=0;
    set<int> s;
    map<int ,int>::iterator iter;
    for (iter=injection.begin();iter!=injection.end();iter++,size1++) { 
   
        s.insert(iter->second);
    }
    if(size1==s.size()) bIsInjection= true;
    return bIsInjection;
}

set函数,是一个集合,他的作用是对于插入的数据进行排序以及去重,所以我们把Y值插入到s中观察是否有相同的数据,只需要判断键值对的数量以及集合的长度是否相等即可
2.验证满射

bool ValidateSurjection(vector<int> src, vector<int> dst, map<int, int> surjection)
{ 
   
    bool bIsSurjection = false;
    //请把你的代码写在下方,请勿修改任何已有代码
    int temp=dst.size();
    set<int> s;
    map<int ,int>::iterator iter;
    for (iter=surjection.begin();iter!=surjection.end();iter++)
    { 
   
        temp--;
    }
    if(temp==0) bIsSurjection= true;
    //
    return bIsSurjection;
}

我们对键值对进行遍历,每次都把Y中的长度-1,直至遍历完成,如果长度为0,就是满射,如果不是就不是满射
3.验证双射:

bool ValidateBijection(vector<int> src, vector<int> dst, map<int, int> bijection)
{ 
   
    bool bBiSurjection = false;
    //请把你的代码写在下方,请勿修改任何已有代码
    int temp=dst.size();
    bBiSurjection= true;
    map<int,int>::iterator iter;
    for (int i = 0; i < src.size(); ++i) { 
   
        iter=bijection.find(src[i]);
        if(iter==bijection.end()){ 
   
            bBiSurjection= false;
        }
    }
    set<int> s;

    for (iter=bijection.begin();iter!=bijection.end();iter++) { 
   
        s.insert(iter->second);
    }
    if(temp!=s.size()){ 
   
        bBiSurjection = false;
    }
    //
    return bBiSurjection;
}

验证双射,双射一 一对应,我们遍历X,在map中寻找X的键值对,有键值对就证明是对的,一旦找到没有键值对的X,就不是双射。再遍历Y,看Y中是否有相同值,有就不是双射

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132811.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 婴儿照片大全可爱萌萌_好萌图片

    婴儿照片大全可爱萌萌_好萌图片萌翻了!这是一组可爱的婴儿照片,你可以从中学习到优秀的婴儿照片拍摄技术。就像我以前说的,婴儿总是持续在运动,因此很难找到一个好的角度。拍摄的时候,试着和婴儿保持同一水平,使用长de焦距。特别在最初几

    2022年8月4日
    10
  • html静态网页生成器_网页后端制作

    html静态网页生成器_网页后端制作一、文章编辑页制作当首页制作完毕后,需要显示内容就需要有文章数据,此时我们创建一个文章编辑页增加对应的数据。那么我们创建一个页面,命名为文章发布页:接着我们查看标题部分:此部分为左右两边,左侧为标题提示输入和一个标题的文本输入框,右侧是一个发布按钮,此时我们创建左右两行:由于左右两行需要在同一行显示,那么此时我们就需要设置左右两行的宽度为50%,使其不占满超过100%的宽度居于一行,并且需要设置高度为包裹:接着在左侧添加一个文本以及一个输入框:那么右侧就是一个发布按钮,发布按钮更改

    2022年10月20日
    2
  • kali linux安装教程

    kali linux安装教程这是在虚拟机安装下面是介绍kalilinux***操作系统一、Kali简介1.1、相关连接Kali百度百科:https://baike.baidu.com/item/Kali%20linux/8305689?fr=aladdinKaliwiki:https://en.wikipedia.org/wiki/KaliKali官网:https://www.kali.org/1….

    2022年5月16日
    45
  • docker的常用命令汇总_常用docker命令

    docker的常用命令汇总_常用docker命令文章目录Docker命令总结Docker命令总结还在百度Docker命令?推荐一套我用起来特顺手的命令!简介:Docker是一个开源的应用容器引擎,让开发者可以打包应用及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上。使用Docker可以更方便地打包、测试以及部署应用程序。Docker镜像官网阿里云镜像中心Docker环境安装:#安装yum-utilsyuminstall-yyum-utilsdevice-mapper-persistent-dat

    2022年9月18日
    0
  • 使用SpringBoot RestTemplate实现第三方接口对接

    使用SpringBoot RestTemplate实现第三方接口对接实现对接第三方接口,可以使用HttpClient(年岁较久),也可以使用SpringBootRestTemplate(新生代)。可根据个人喜好选择适当的方式进行对接,个人推荐使用SpringBootRestTemplate。具体使用如下:自定义配置类:application.yml文件中配置:注意:对应XXXConfig实体类中属性,在application.yml中配置必须在同一级…

    2022年5月30日
    36
  • ASP.NET_SessionId 何时生成?何时失效?有何作用呢?

    ASP.NET_SessionId 何时生成?何时失效?有何作用呢?相信做asp.netweb开发的码友们,对ASP.NET_SessionId一定不陌生。ASP.NET_SessionId保存在浏览器cookie中。那么它是来源于哪里?何时生成?何时失效?有何作用呢?带着这些疑问,我们开始探寻它。废话不多说,实践才是检验真理的最好方法,直接上代码。打开VS建立一个APS.NETMVC程序,在HOME页面添加如下代码:clearSession和clearSessionId这两个是ajax方式请求过去的,不会刷新页面,对应的后台方法如下:对应的action代

    2022年7月16日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号