Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【离散数学】单射、满射与双射

【离散数学】单射、满射与双射

作者头像
全栈程序员站长
发布于 2022-06-28 08:23:33
发布于 2022-06-28 08:23:33
14.3K1
举报

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

本文目录

1、什么是映射?

我们考虑这样的关系:对于集合X中的每一个元素,都有唯一的属于集合Y中的元素被其所指向,我们就称这样的关系叫映射(英:mapping,日:写像(しゃぞう))。这是用很通俗的语言解释定义的映射,而相信大家也都在高中数学必修1里面学过,对映射这个概念想必也都不陌生吧! 从这个定义中,你能get到什么信息呢? ①“X集合中的每一个元素”:如果有集合X的元素不对应集合Y的某个元素的,则不是映射。 ②“都有唯一的Y与之对应”:如果有集合X的元素同时指向了集合Y中的两个以上个元素的,则不是映射。

因此,要进入到对今天的主题——单射、满射与双射的区分,首先你得判断,是不是集合X中的所有元素都指向,且只指向了集合Y当中的一个元素呢?只有if(判定的结果==true)时,我们才可以进行下一步的区分判断;else,它连映射都不是,还判断个什么呢? 这就好比,如果说你是一个高三的学生,你连高一年级都不属于,还要去问你是不是高一(7)班的吗?

小结:如果两个集合各自的元素之间的指向关系满足以下两个条件,它就是一个映射关系。此时方可进一步判断,它具体是哪一种映射了。 (1)集合X中的所有元素均有指向集合Y中的某元素,而没有谁不指向的; (2)集合X中的所有元素均只指向了集合Y中的一个元素,而没有谁指向两个或更多的。

2、映射的分类

2.1 单射

所有被X里的元素指向的Y里的元素,都是只被一个X的元素所指向的,而没有被两个或更多X的元素所指向,那么这种映射关系就叫单射(英:injection,日:単射(たんしゃ))。 单射不考虑是否Y当中的所有元素都无一遗漏地被X的元素所指向了。也可以有Y的元素不被任何X的元素所指向,不影响它是单射。

举个例子。

就比如说看电影吧。有“观众”(X)和“座位”(Y)两个集合。现在我们知道,每一个观众必然会坐在一个座位上,并且他只坐在一个座位上,所以这个对应关系首先是个映射。 又因为每张座位只可被一个观众所对应,不可能一张座上坐两个人,且不是所有座位都一定有观众与之对应的,也可能会有空座位,所以这个对应关系是一种单射关系。

观众与电影院座位(单射): ①要么没人坐; ②要么只有一个人坐。 (要么不被任何观众所指向,要么只被一个观众所指向)

2.2 满射

Y集合里的所有元素均被X里的元素所指向,集合Y中没有任何一个元素不被集合X的元素所指向的,那么这种映射关系就叫满射(英:surjection,日:全射(ぜんしゃ))。 满射不考虑指向同一个Y的有多少个X。只要所有的Y都被指向到了,就是满射。

再举个例子。

比如说班上分小组吧。每个组至少有一个人,否则就不构成一个组(它就不存在)。那么,每个学生都属于且只属于一个组,这首先是映射。又因为每个组必然包含至少一个学生,也可能有多个学生,所以,“学生”集合(X)与“小组”集合(Y)之间的关系,就是一种满射关系。

学生与分组(满射): ①要么分组不存在; ②只要存在这个分组,它就一定被一个或多个学生所指向。

2.3 双射

既是单射,又是满射的映射,就叫做双射(英:bijection,日:全単射(ぜんたんしゃ))。 “所有Y中的元素均被X中的元素所指向,且只被X的一个元素所指向。没有不被指向的,也没有被两个或更多X的元素所指向的。”

举个例子。

最典型的,“学生”(X)与其“学生证号码”(Y)。每个学生都必然有且只有一个学生证号,所以这首先是映射。又因为,每个学生证号码都必然被且只被一个学生所指向,没有不被任何学生指向的学生证号码(它是满射),也没有同时被多个学生指向的学生证号码(它也是单射),所以,这个映射关系是一种双射关系。

学生与学生证号码(双射): 一一对应,互为在彼此的集合里有且只有对方一个与自己相对应的元素。

2.4 既非单射也非满射,但为映射

还有一种映射关系,既不是单射也不是满射。Y中有元素没被X的元素所指向,而被指向的Y的元素,也不是所有都只被一个X元素所指向(存在被多个X元素指向的)。

举个例子。

比如围棋比赛吧。有“棋手”(X)和“棋盘”(Y)两个集合。一个棋手在且只在一个棋盘上下棋,一个棋盘上却有两个棋手。但是,并不是所有的棋盘都会有棋手的。比如,有3个棋盘,却只有4位棋手,那么,必然有一个棋盘是空的,不被任何棋手所指向。 每一个棋手指向且仅指向一个棋盘,这是映射。但是,既不是每个棋盘都必被棋手所指向,也不是每个被指向的棋盘都无一例外只被一个棋手所指向的,所以这种映射关系,既不是满射,也不是单射

3、你掌握了吗?

你学废了吗?来,来,来,拿出你的小本本和笔,做两道题来练一下吧!

一共有六道题。写出两个集合之间是否存在映射关系,如果存在,写出是哪一种映射关系。 要求:从“单射而非满射”、“满射而非单射”、“双射”、“不是单射也不是满射”、“不是映射”中选词作答。

答案将会在评论区公布。

4、心得

我又听见了那句上学时经常听到的问题:“我知道这个有什么用?我买菜需要用到它吗?” 嗯,你买菜当然不会用到它,你不会跟摊主说,你这菜和你人之间有什么映射关系。 但是,比如说,你在设计数据库的时候,就可以和同一个组的小伙伴讨论道,“这个字段应该是主键。因为它值的集合与这个表中记录的集合呈双射关系。” 而不会是这样的: “emmm……啊??主键,我觉得大概可能是这个属性啊。为什么呢?因为……我也说不上来,大概,就是因为那个,它是唯一的。啊不,它可以唯一确定一个人……emmm,一个人只拥有一个这种属性,这种属性也只对应一个人……emmmm,大概也许就是这样吧,我也不是太清楚,我也不太确定,你自己再考虑考虑吧!”

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
请问答案在哪儿呢
请问答案在哪儿呢
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
qiankun 实战(一)
前两天用了一下微前端框架 icestark, 在实际架构搭建过程中发现中发现在 Vue 主应用子应用之间切换 tag (tag 分别主应用和子应用的页面)页签时会有子应用数据状态无法保存的情况,搜索了一波解决方案后发现,icestark 中 React 应用实现了对数据状态的缓存,Vue 里面没有这个实现。
草帽lufei
2022/07/29
7940
qiankun 实战(一)
十九.使用Vue脚手架
Vue脚手架可以快速生成Vue项目基础的架构。 1. 安装3.x版本的Vue脚手架: npm install -g @vue/cli 2. 基于3.x版本的脚手架创建Vue项目: 1. 使用命令创建Vue项目 命令:vue create my-project 选择Manually select features(选择特性以创建项目) 勾选特性可以用空格进行勾选。 是否选用历史模式的路由:n ESLint选择:ESLint + Standard config 何时进行ESLint语法校验:Lint on save babel,postcss等配置文件如何放置:In dedicated config files(单独使用文件进行配置) 是否保存为模板:n 使用哪个工具安装包:npm 2. 基于ui界面创建Vue项目 命令:vue ui 在自动打开的创建项目网页中配置项目信息。 3. 基于2.x的旧模板,创建Vue项目 npm install -g @vue/cli-init vue init webpack my-project
Yuyy
2022/06/28
3740
搭建vue2.0脚手架
1. 全局安装 vue-cli   npm install --global vue-cli 2. 创建一个基于 webpack 模板的新项目   vue init webpack my-project 3. 安装依赖   cd my-project   npm install (换源安装: npm install --registry https://registry.npm.taobao.org )
javascript艺术
2021/05/28
9930
搭建vue2.0脚手架
Vue笔记(9) 脚手架
之前我们在脚手架2运行时是用的npm run dev,现在脚手架3用的是npm run serve,可以在package.json里面找到
y191024
2022/09/20
2600
Vue笔记(9) 脚手架
Vue脚手架搭建项目
全局安装vue脚手架 $ npm install -g vue-cli 卸载方法 $ npm uninstall -g vue-cli 查看vue版本(注意:大写的V) $ vue -V
ProsperLee
2018/11/19
7610
08 . Vue脚手架安装,使用,自定义配置和Element-UI导入使用
https://element.eleme.cn/#/zh-CN/component/quickstart
iginkgo18
2020/11/24
1.6K0
08 . Vue脚手架安装,使用,自定义配置和Element-UI导入使用
Vue新手必学:Vue的使用和Vue脚手架详解
Vue.js是一套用于构建用户界面的渐进式JavaScript框架,被广泛用于单页面应用程序的开发。对于初学者来说,Vue的简洁易用和灵活性使其成为学习前端开发的理想选择。本文将介绍Vue的基本使用方法,并深入了解Vue脚手架的搭建和使用。
IT_陈寒
2023/12/14
7510
Vue新手必学:Vue的使用和Vue脚手架详解
17、webpack从0到1-构建vue项目
讲下webpack中的对于vue配置,其实vue官方就提供了一套模板vue-webpack-template,我们学习学习,然后基于当前自己的项目来配置下。 git仓库:webpack-demo 1、处理vue 对于.vue这种文件,webpack肯定是不认识的,所以我们需要相应的loader来处理它,通过查阅文档我们发现需要安装这两个东西: $ npm install vue-loader vue-template-compiler --save-dev 然后安装文档上面的教程,照猫画虎搞一下。这
Ewall
2020/03/25
5870
Vite2.0搭建Vue3.0项目应用实战
最近Vite2.0很火热,说是要替代webpack作为下一代前端构建工具。上个周末搬完房子仔细研究了一下,照着我们目前的项目环境,尝试搭建了一套基础环境,简单了解了Vite2.0的配置,以及各种库的集成。这里对Vite2.0不做过多的介绍,主要优点就是快,快,快。
江一铭
2022/06/16
4230
Vite2.0搭建Vue3.0项目应用实战
08Vue.js快速入门-Vue综合实战项目
8.1. 前置知识学习 npm 学习 官方文档 推荐资料 npm入门 npm介绍 需要了解的知识点 package.json 文件相关配置选项 npm 本地安装、全局安装、本地
老马
2018/01/05
1.4K0
vue
main.js 程序的入口, 里边是导入的模块,例如vue模块,以及自己写的模块等
Dean0731
2021/03/05
3320
vue
​(非软文)Webpack从入门到实战搭建Vue脚手架(一万字总结)
安装依赖包 (-D 将依赖记录成开发依赖, 只是开发中需要用的依赖, 实际上线不需要的)
Vam的金豆之路
2021/12/01
1.3K0
vue脚手架
学习vue之初就接触到了脚手架,去年的时候还是使用vue cli进行构建,今年基本都用vite了,官方也都推荐这种方式,那就赶快用起来,快速开发属于自己的vue应用。
希里安
2023/10/30
3170
vue脚手架
Vue2.0搭建脚手架流程
Vue.js是一套构建用户界面的渐进式框架。 Vue 只关注视图层,采用自底向上增量开发的设计。 Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
小周sir
2019/09/23
7970
Vue2.0搭建脚手架流程
创建vue项目的几种方式
最近一段时间在学习vuejs和element-ui、iview-ui这些前端知识,在创建vuejs项目时发现有几种不同的方法:
ccf19881030
2020/04/10
3.3K0
vue[0x01] -- Hello World
如果你看过一千部以上的电影,你就会发现,这世间根本没有什么离奇的事。为什么从后端或者说网页三剑客过来的哥们,会有觉得vue上手快,容易学的错觉?很大程度上,在早期的vue中,还是以脚本文件的形式通过script标签引入vue,而稍微懂点编程的应该也都接触过像jQuery之类的类库,可以说你是天然会,创建一个实例也很好理解,你会发现印象比较深刻的例子就是我在一个文本框输入数据楼下的显示文本也跟着变化了,数据与视图巧妙结合。前后端通过JSON进行数据交互,Ajax技术进行通信,硬憋一下也还行。那么,为啥又难了呢?前端技术发展太快了,前阵子在v站上看到一个帖说后端看不懂前端(这个笔者在目前所在公司真的有很深很深很深很深深深深的感受,也让我明白了做职业规划的重要性),其实,你找个前端过来也不一定能完全看得懂我个人认为,因为兴起的技术太特么多了,两只手怎么学的过来,若没有惊人的毅力。而且版本更新太快了,打开一个现代版的前端项目,配置文件就够你喝一壶,当然可能还有一些政治因素限制,僧多肉少的局面对源码也有一定的要求,导致难度曲线一下子就上去了,所以说比较难吧。生活不止眼前的苟且,还有你到不了的远方。加油吧,一点一点成长起来,同志们。
江涛学编程
2020/06/19
5490
vue[0x01] -- Hello World
利用官方的vue-cli脚手架来搭建Vue集成开发环境
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linzhiqiang0316/article/details/79176641
林老师带你学编程
2019/05/26
5460
手把手教你写一个脚手架
最近在学习 vue-cli[1] 的源码,获益良多。为了让自己理解得更加深刻,我决定模仿它造一个轮子,争取尽可能多的实现原有的功能。
用户4456933
2021/07/12
1.8K0
手把手教你写一个脚手架
Vue开发环境搭建
nodejs中集成了npm 因此需要安装nodejs,官方地址是https://nodejs.org/en/ 查看当前npm版本
羊羽shine
2019/06/15
1.1K0
开箱即用的 Vue Webpack 脚手架模版
于 2017 年初,有在 Github 建立并维护一个项目:Vue Boilerplate Template,以成就一款开箱即用 Vue + Webpack 的脚手架模版;其目标与宗旨是:根据以往经验提供一些参考,对于如何构建中大型 Vue 项目。这蛮久以来,有坚持维护更新,各项主要依赖库,基本都保持着同步升级;记载这篇文章,即是对关于它的设计做下更全面的阐述,以起到项目 Wiki 的作用。 关于此 Vue、Webpack 脚手架模版 这是一个用以开发 Web 单页应用的脚手架项目;谨以 Vue 为开发
晚晴幽草轩轩主
2018/07/04
1.1K0
相关推荐
qiankun 实战(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档