数学与泛型编程   数学与泛型编程(1)埃及乘法、加法链_nameofcsdn的博客-CSDN博客_数学与泛型编程

目录

一,范畴篇

二,类型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种区间:开区间、闭区间、左开右闭区间、左闭右开区间

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

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

数学与泛型编程(6)编程的基本概念相关推荐

  1. 数学与泛型编程:高效编程的奥秘pdf下载_【编程入门】提升孩子全脑思维、逻辑能力,帮你省下万元培训费...

    现在什么辅导班最火.最烧钱? 大概"少儿编程"当之无愧. 继"奥数"之后,少儿编程再次成为家长的纠结: 上还是不上? 不上真的会"输在起跑线上&quo ...

  2. 数学与泛型编程:高效编程的奥秘pdf_Java 泛型与类型擦除

    UCB 19Fall学期 CS61B Prof. Hilfinger讲泛型部分的PPT: http://www-inst.eecs.berkeley.edu/~cs61b/fa19/materials ...

  3. 数学与泛型编程:高效编程的奥秘 pdf下载_Mac 软件专题:教学参考工具软件-外语/医学/天文/地理/数学等...

    今天和大家分享mac软件专题:教学参考工具软件,在这个专题中,主要向大家推荐一些Mac上优秀的教育教学.知识参考类的软件,包含外语.医学.天文.地址.数学.音乐等方面,学生.老师以及相关的工作者不要错 ...

  4. 数学与泛型编程(2)群论

    数学与泛型编程   https://blog.csdn.net/nameofcsdn/article/details/110448717 数的认知(3)--加减乘除.群环域   https://blo ...

  5. c语言在数学方面的应用编程,浅谈数学在C语言编程中的应用.doc

    浅谈数学在C语言编程中的应用 浅谈数学在C语言编程中的应用 [][]C语言对学习者的数学基础要求较高对一部分学生来说学好C语言有一定的困难.本文就本专业知识和自身对C语言的学习经验对数学在C语言编程中 ...

  6. F#,印度数学教育与优秀编程

    F#,印度数学教育与优秀编程 gisspace 转帖 这个周末,我终于可以坐下来做我在一年来一直承诺要做的事情:我开始应用F#.这次体验相当有趣.十多年来,我第一次不能只是通过坐着瞧一些样本代码来理解 ...

  7. 编程c语言要数学很好吗,编程与数学的关系:学好编程就能学好数学吗?

    原标题:编程与数学的关系:学好编程就能学好数学吗? 在大学数学学科中 线性代数是最为抽象的一门课 从初等数学到线性代数 思维跨度比微积分和概率统计要大得多 大多数小伙伴学过以后一直停留在 知其然不知其 ...

  8. c语言和高数的函数,数学函数与编程函数 数学的函数与编程的函数一样吗?

    1, 数学的函数与编程的函数一样吗? 是相通但不同领域的概念.数学中的函数是根据给定的输入计算或转换得到结果.而编程中的函数则是一个处理过程,它可以执行数学中的函数一类的纯粹计算过程也可以做更多更复杂 ...

  9. linux系统编程之进程概念(操作系统---管理,进程创建,进程状态,进程优先级, 环境变量,程序地址空间,进程O(1)调度方法)

    系统编程: 进程概念->进程控制->基础IO->进程间通信->进程信号->多线程 进程概念 冯诺依曼体系结构----现代计算机硬件体系结构 冯诺依曼体系结构----现代计 ...

最新文章

  1. tcp retransmission 出现的原因_浅谈TCP的keepalive机制
  2. IIS6的PHP最佳配置方法
  3. 替换openjdk的版本时遇到报错Transaction check error
  4. RabbitMQ安装与初始配置【转载】
  5. 英伟达发布全球唯一千万亿级集成型 AI 工作组服务器
  6. 9.27-uname,useradd命令
  7. mysql中如何删除多个表格_mysql怎么批量删除多个表?
  8. x86_64的内存映射
  9. 面试:一文搞懂String、StringBuilder、StringBuffer 区别
  10. [JavaScript] Cookie,localStorage,sessionStorage概述
  11. mysql Slave_IO_Running:NO(解决方法)
  12. LoudMiner:伪装在VST软件中的跨平台挖矿软件
  13. 软件项目需求开发过程实践之软件需求说明书
  14. 山东大学高频电子线路实验三 正弦波振荡器实验详解
  15. 2020年欧空局10m土地覆盖数据数据分享
  16. Java学习里程-----Java基础_26 BigDecimal类
  17. “全栈”工程师 请不要随意去做
  18. AIX虚拟内存管理机制(转)
  19. 关于务实思维的务实思考
  20. 部署WekaFS并行文件系统的10大理由

热门文章

  1. 正则匹配替换最后一位字符
  2. Android studio音乐播放器
  3. “达内”JAVA技术培训有感(二)
  4. 百度地图绘制工具类 DrawingManager.js 源码
  5. nginx开启Gzip压缩,Vue性能优化之使用gzip压缩打包
  6. JMeter与其它工具对比
  7. iOS:xib中加载自定义的xib控件, 解决死循环
  8. 什么是字节码?采用字节码的最大好处是什么?
  9. CAP理论-快速开始
  10. 实现网站访问人数统计