数学与泛型编程(2)编程的基本概念

目录

一,范畴篇

二,类型type、概念concept

三,类型函数及类型属性函数

1,类型函数

2,类型属性函数

四,正则、半正则

1,正则Regular

(1)操作集

(2)语义集

(3)复杂度

2,半正则Semiregular

五,迭代器

1,操作集

2,迭代器必须是正则的

3,迭代器的分类

六,区间


一,范畴篇

亚里士多德有一部重要作品叫做《工具论》,第一篇文章叫做《范畴篇》。

亚氏在这篇文章中介绍了抽象这一概念。他论述了个体(individual)、物种(species)与属(genus)之间的区别。物种能够概括某一类事物的“本质”特征,而属则包含很多物种。

亚里士多德所说的属给泛型编程提供了灵感,这种编程方式把注意力放在属的层面上,而不是种的层面上。

二,类型type、概念concept

类型对应种、概念对应属。

concept可以视为对类型所提出的一系列要求,或是一个用来判断类型是否满足这些要求的谓词。

对类型所提出的要求,涉及下列三个方面:(简称操作集、语义集、复杂度

  • 类型必须提供哪些操作;
  • 这些操作的语义;
  • 这些操作的时间/空间复杂度。

为什么要把时间/空间复杂度也算作一项要求呢?

比如栈这种类型,在O(1)时间内进行push和pop就是必须满足的要求,无论是用数组还是链表还是向量来实现栈,都要满足这个要求,不满足的话就不能算栈。

三,类型函数及类型属性函数

1,类型函数

类型函数是一种能够根据给定的类型来返回其附属类型的函数。

比如coefficient_type(Polynomial)

2,类型属性函数

类型属性函数是一种能够根据给定的类型来返回一个值,用以表示该类型的某项属性的函数。

比如C++的sizeof关键字、python的type函数

四,正则、半正则

有两种常见的类型属性,一个是正则Regular,一个是半正则Semiregular

1,正则Regular

(1)操作集

  • 拷贝构造
  • 赋值
  • 判断是否相等(等价测试)
  • 析构

(2)语义集

第一条公理的意思是:如果用b构造出了a,那么凡是与b相等的事物,现在也都会与a相等。

第二条公理的意思是:如果把b赋给了a,那么凡是与b相等的事物,现在也都会与a相等。

第三条公理用到了正则函数,这种函数能够根据相等的输入值而产生相等的输出值。

(3)复杂度

Regular对复杂度所提出的要求是:每项操作的复杂度都不能比该对象所在区域内的线性操作更高。

这个区域是指对象所占据的全部空间,它既包括头部,又包括远程部分,既包括数据,又包括连接器。

2,半正则Semiregular

半正则与正则类似,只是没有明确定义等价测试操作而已。

在很难实现等价谓词的场合,就需要用到这个concept。然而即便在这种情况下,我们还是会认为,值之间是有相等关系的,只不过没有明确定义出来而已

这种预设使得与拷贝及赋值有关的那些公理(即正则的三条公理)依然能够成立。

五,迭代器

迭代器也是一种类型属性。迭代器可以理解为一种能够在线性时间内执行线性搜索的东西,可以视为广义的指针。

1,操作集

  • 常规类型所应支持的操作
  • 移动到后继位置的操作
  • 解引用操作

2,迭代器必须是正则的

因为我们有时想知道,某个迭代器有没有赶上另外一个迭代器。

3,迭代器的分类

输入迭代器:支持单向遍历,只能遍历一轮(如输入流的迭代器)

前向迭代器:支持单向遍历,可以遍历多轮(如链表的~)

双向迭代器:支持双向遍历,可以遍历多轮

随机访问迭代器:可以用在需要进行随机访问的算法中

输出迭代器:可以交替执行移动到后继位置(++)与解引用(*)这两种操作

链式迭代器:可以用在后继函数可变的场合中

分段迭代器:可以用在数据存储于多个不连续区段的场合中

六,区间

数学里面有4种区间:开区间、闭区间、左开右闭区间、左闭右开区间

编程中只用到两种:闭区间、左闭右开区间

区间有两种表示方式:一种叫做双界区间,另一种叫做计数区间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值