离散 单射 满射 双射

离散 单射 满射 双射单射双射满射阐述一下什么是单射,双射,满射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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Tomcat系统架构

    Tomcat系统架构

    2021年10月5日
    33
  • 国内8大知名工程项目管理软件推荐[通俗易懂]

    国内8大知名工程项目管理软件推荐[通俗易懂]推荐国内比较知名的8个工程项目管理软件:1、PingCode;2、Worktile;3、泛普软件;4、Microsoft Project;5、广联达;6、新中大;7、红圈;8、建文软件。虽然同为工程

    2022年7月2日
    175
  • 深入浅出Java垃圾回收机制

    深入浅出Java垃圾回收机制

    2022年3月13日
    40
  • leetcode-138. 复制带随机指针的链表(链表)

    leetcode-138. 复制带随机指针的链表(链表)给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random –> Y 。那么在复制链

    2022年8月9日
    9
  • oracle连接出现ora-12154,与虚拟机Oracle连接出现ora-12154问题的解决方法

    oracle连接出现ora-12154,与虚拟机Oracle连接出现ora-12154问题的解决方法谈到ora-12154问题,网上有一大堆解决方法,原因基本统一:tns或listener配置不正确。对于listener配置不正确的一般较少发生,大多数人都是按照默认配置一路“下一步”过来的,基本都是orcl的服务名,如果说本地可以连通orcl,别的机子就连不通那应该跟listener关系不大。大部分都是tns配置不正确。我遇到的现象是:在本机建了一个2003的虚拟机,虚拟机里面装了oracle1…

    2022年7月19日
    15
  • vscode 前端常用必备插件汇总。「建议收藏」

    vscode 前端常用必备插件汇总。「建议收藏」持续更新,欢迎推荐好的插件。1.vscode基础智能能提示类插件2.vscode美化优化类插件3.vscode各大框架辅助插件4.markdown工具类插件

    2022年7月25日
    21

发表回复

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

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