离散 单射 满射 双射

离散 单射 满射 双射单射双射满射阐述一下什么是单射,双射,满射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中是否有相同值,有就不是双射

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • CTR经典模型串讲:FM / FFM / 双线性 FFM 相关推导与理解

    CTR经典模型串讲:FM / FFM / 双线性 FFM 相关推导与理解FM在计算广告领域,因子分解机(FactorizationMachines,FM)是很经典的模型,面对量大且稀疏的数据,此算法仍然可以取得比较优秀的效果。假设有下面的数据:Clicked?CountryDayAd_type1USA26/11/15Movie0China1/7/14Game1China19/2/15Game其中,Clicked?是label,Country、Day、Ad_type是特征。由于三种特征都是类别型的,需要经过独热

  • idea在类中搜索方法的快捷键_idea控制台搜索快捷键

    idea在类中搜索方法的快捷键_idea控制台搜索快捷键展开全部IntelliJIDEA代码常用的快捷键有:Alt+回车导入包,自动修正Ctrl+N查找类Ctrl+Shift+N查找文件Ctrl+Alt+L格式e69da5e887aa62616964757a686964616f31333365646234化代码Ctrl+Alt+O优化导入的类和包Alt+Insert生成代码(如get,set方法,构造函数等)Ctrl+E或者Alt+…

    2022年10月10日
  • php+mysql动态网站开发案例课堂_用php写一个网页页面

    php+mysql动态网站开发案例课堂_用php写一个网页页面在这篇文章中,我尽量用最浅显易懂的语言来说明使用PHP,MySQL制作一个动态网站的基本技术。阅读本文需要简单的HTML基础知识和(任一编程语言的)编程基础知识(例如变量、值、循环、语句块的

  • ODBC与JDBC比較

    ODBC与JDBC比較

  • 最近邻插值、双线性插值、双三次插值

    最近邻插值、双线性插值、双三次插值 1.最近邻插值越是简单的模型越适合用来举例子,我们就举个简单的图像:3X3的256级灰度图,也就是高为3个象素,宽也是3个象素的图像,每个象素的取值可以是0-255,代表该像素的亮度,255代表最亮,也就是白色,0代表最暗,即黑色。假如图像的象素矩阵如下图所示(这个原始图把它叫做源图,Source):234  38   2267    44   1289    65 …

  • centos7.6安装docker_docker 生产环境

    centos7.6安装docker_docker 生产环境前言前面一篇学了mac安装docker,这篇来学习在linux上安装docker环境准备Docker支持以下的CentOS版本,目前,CentOS仅发行版本中的内核支持Docker。Doc

发表回复

您的电子邮箱地址不会被公开。

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