单射 双射 满射

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

离散 单射 满射 双射相关推荐

  1. 仿射、满射、单射、双射等数学概念简单图解

    在机器学习的相关研究中经常会遇到域之间的关系映射,下面就结合图示简单总结一下集中常见的映射关系 仿射(affine mapping):也称为 仿射变换(affine transformations), ...

  2. 离散实验sdut3805双射

    离散题目11 Problem Description 给定一个数学函数写一个程序来确定该函数是否是双射的 Input 多组输入. 第一行输入三个整数n,m,k,分别表示集合a中的元素个数,集合b中的元 ...

  3. (离散)证明:单射 满射 同态 同构 的证明框架

    设<B, *>和<C,°>是两个代数系统,*和°分别是B和C上的二元运算,g是从B到C的一个映射: 证 g单射:对 ∀ b1,b2∈B,b1≠b2,有 g (b1) ,g(b2 ...

  4. 宋浩_1_函数映射, 满射/双射/单射/逆映射, 定义域,值域

    catalog 映射 映射

  5. 北航计算机学院往年夏令营+考研面试题目汇总

    北航计算机学院硕士复试机经+面经: 北航计算机学院往年夏令营+预推免机试题目汇总 北航计算机学院往年夏令营+考研面试题目汇总 北航计算机学院往年夏令营+考研面试数理题目汇总 以下是我在网络上找到的北航 ...

  6. 2020年保研、夏令营、预推免记录

    2020坎坎坷坷终于迎来尾声,新冠疫情.外交形势多变.保研政策改革使得求学路并不顺利.这篇文章会有点冗长,记录了保研到推免一系列的经历和感想,可以直接跳转至需要的部分. 目录 保研篇 夏令营篇 南开大 ...

  7. 关于映射的一些理解与常见命题

    文章目录 写在前面 一些定义 映射的有关定义 单射 满射 双射 逆映射 一点理解 一些命题与定理 命题1:有限集合间建立双射,两集合元素个数相等 证明 命题2:有限集的单射与满射可由元素数相等互相推出 ...

  8. 数学 {映射,函数,复合函数,结合函数,反函数}

    {数学 {映射,函数,复合函数,结合函数,反函数}, @LOC_2} 映射 定义 X , Y X,Y X,Y为两个非空集合, 若存在一个法则 f f f, 使得对于 ∀ x ∈ X \forall x ...

  9. Algebra:Chapter 0 - 目录

    目录 引言 I 预备知识: 集合论和类 1 朴素集合论 1.1 集合 1.2 集合的包含 1.3 集合之间的操作 1.4 不相交的并和积 1.5 等价关系,划分,商 练习 2 集合之间的函数 2.1 ...

  10. 映射、单射、满射、双射

    转载:从射箭来理解什么是映射.单射.满射.双射 一.什么是映射 射,从一个集合射到另一个集合,把集合1的元素A射到集合2的元素B,强调2个集合中元素之间的对应关系:映,照镜子,物体会映出来像,引申出像 ...

最新文章

  1. gdb调试 print打印不出变量值或者不准确
  2. Android成长日记-使用ViewFlipper实现屏幕切换动画效果
  3. 在Windows环境下安装hyperledger和byfn
  4. 喷水装置(一)--nyoj题目6
  5. SAP Cloud Connector里的virtual host和internal host有什么区别
  6. (27)css3 2D转换综合案例—卡包效果
  7. vod点歌系统_专业音响系统常见故障及修理方法
  8. Airflow 中文文档:安全
  9. 聊聊Elasticsearch RestClient的RequestLogger
  10. Fckeditor 2.4.2 php任意上传文件漏洞
  11. PIP(Python包管理工具)-Mac环境下安装
  12. linux centos erlang,CentOS 7.7安装Erlang和Elixir
  13. 剑指_复杂链表的复制(Python)
  14. 基于tensorflow的iris数据集分类示例
  15. 地址转换函数(点分十进制与网络字节序的二进制)
  16. dz论坛服务器限制上传大文件,Discuz 如何设置允许上传附件大小
  17. netty: LEAK: ByteBuf.release() was not called before it‘s garbage-collected
  18. unity Layer CullingMask
  19. 【微信小程序】点击图标跳转页面
  20. python渐变色代码_使用python画图怎么设置渐变色

热门文章

  1. 英雄联盟英雄皮肤抓取
  2. npm ERR! 400 Bad Request - PUT xxx - Cannot publish over previously published version “1.0.0“.
  3. JavaScript 销毁对象
  4. Ubuntu Screen recorder tool - Simple Screen Recorder
  5. 现在的 Linux 内核和 Linux 2.6 的内核有多大区别?
  6. VS code输出框中莫名其妙的繁体字(乱码)
  7. t-paas d-paas_什么是PaaS? 平台即服务的解释
  8. 无盘服务器快慢取决于什么,cpu运行速度的快慢取决于什么
  9. python中如何将数字转换成中文数字_Python实现中文数字转换为阿拉伯数字的方法示例...
  10. 黄金分割法 c语言程序,优化程序-黄金分割法C语言程序设计