朱金灿
前言:说来很不好意思,大学时数学学得很差(大学高数上下都挂过),现在倒有兴致来谈数学了。不过这篇确实是有感而发,希望能和大家交流,只要有道理,无论是赞同或批评,都无任欢迎。
映射是数学中的一个基本概念,简单来说就是对于集合A中的每一个元素,通过某个对应法则f,在集合B中都有唯一确定的元素与之对应,就叫做A到B的映射。如果把映射这个概念的规定稍微放宽,变为对于集合A中的大部分元素,通过某个对应法则f,在集合B中都有确定的元素与之对应,叫做A到B的映射。我发现在其它很多领域都处处可见这种映射。
先说和数学领域密切相关的计算机吧。计算机领域的很多分支都有映射的踪迹。首先是数据库。学过数据库的人都知道,两个实体之间的联系可以分为三类:
1. 一对一联系(1:1):,实体集B中至多有一个(也如果对于实体集A中的每一个实体可以没有)实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1:1。
2. 一对多联系(1:n) :
如果对于实体集A中的每一个实体,实体集B中有N(N>0)个实体与之联系而对于实体集B中的每一个实体,实体集A中至多有一个实体与之联系。
3.
M
:N 联系
如果对于实体集A中的每一个实体,实体集B中有N个(N>0)实体与之联系,反之,对于实体集B中的每一个实体,实体集A中有M个(M>0)与之联系。
看看上面,不正是暗合数学中映射的原理吗?还有其它领域吗?有,在编程领域我们也经常看到映射。比如著名的C++标准模板库(STL)里有一个类map,实际上一个映射的集合。
map
是一类关联式容器。它可以自动建立
Key
-
value
的对应。
key
和
value
可以是任意你需要的类型。还有矢量文件和栅格图像文件的转换也充满了映射的思想。比如从
a
类型的矢量文件转换为
b
类型的矢量文件,一般都要先设计好映射表。一般矢量文件内容包含点、线、面三种元素及其相关属性。要转换时你就必须先确定比如线型、线宽之类在
a
类型怎么表示,在
b
类型对应怎么表示,二者怎么联系起来。同理是栅格图像的转换道理也是类似的。
上面谈了映射思想在自然科学领域的体现,那么映射是否不存在社会科学领域呢?也不是,在社会科学领域我也发现了映射。而且说出来估计你也会有点吃惊,那就是语言翻译。为什么说语言翻译存在映射呢?首先我们把两门语言看作两个集合,比如汉语是一个集合,英语是一个集合,那么把汉语翻译为英语或者把英语翻译为汉语不就是一个映射吗?那么映射的对应法则是什么?就是语义相同。
映射在其它领域的广泛体现,无怪乎
数学被称为是一切科学之母。
下面我再深入谈一下我修改的那个映射概念的一个重要特性:不对称性(或者叫我自作聪明的起的一个名字:不完美性)。为什么我要稍微修改那个映射概念?是因为我发现在科学领域很多映射并不严格遵循
对于集合
A
中的每一个元素,通过某个对应法则
f
,在集合
B
中都有唯一确定的元素与之对应,就是说很多映射是不完美的。比如将一种描述复杂的矢量文件转换为一种描述简单的矢量文件就是一种不完美的映射。比如在描述复杂的矢量文件中有线型、线色的描述,但在简单的矢量文件就没有这种描述,那么在转换时就要抛弃这些信息。又比如语言翻译也是一种不完美的映射。比如汉译英,有些具有民族特色的东西就只能靠音译直译过去,比如将工夫翻译为“kongfu
”。反过来,由于汉语对于西方新名词的表述能力的局限,出于应用的迫切需要,很多名词也直接音译过来使用,如“克隆”之类。
参考文献:
《
数据库系统概论
》萨师煊、王珊著