• Home
  • Archives
  • About
  • Github
  • zh


数学篇 - 数据结构丶编程语句丶基础算法与数学的关系(笔记)

看到很多人说,数据结构,算法不能算作数学.

不同的数据结构,都是在编程中运用数学思维的产物。 每种数据结构都有自身的特点,有利于我们更方便地实现某种特定的数学模型.

数据结构

别小看这些数据结构,它们其实就是一个个解决问题的“模型”

数组 (Array)

特点: 可以通过下标,直接定位到所需的数据,适合随机访问.常常和循环语句相结合,来实现迭代法,例如二分查找、斐波那契数列等等

缺点: 数组只对稠密的数列更有效。如果数列非常稀疏,那么很多数组的元素就是无效值,浪费了存储空间。此外,数组中元素的插入和删除也比较麻烦,需要进行数据的批量移动。

如何解决稀疏数列问题: 链表

链表 (Linked List)

链表中的结点存储了数据,而链表结点之间的相连关系,在 JavaScript 语言中是通过对象引用来实现的。

特点: 不能通过下标来直接访问数据,而是必须按照存储的结构逐个读取

优势: 不必事先规定数据的数量,也不再需要保存无效的值,表示稀疏的数列时可以更有效的利用存储空间,同时也利于数据的动态插入和删除

缺点: 于数组而言,链表无法支持快速地随机访问,进行读写操作时就更耗时

哈希表 (Hash)

哈希表就可以通过数组和链表来构造,之前我们通过余数来实现哈希表.

优势:如果关键字已知则存取速度极快,插入块

缺点:删除慢,如果不知道关键则存取很慢,对存储空间使用不充分,会出现哈希冲突

树 (Tree)

优点:查找,插入,删除都快,树总是平衡的。类似的树对磁盘存储有用,不会出现哈希冲突

缺点:算法复杂

图(Graph)

图是另一种非线性数据结构。在图结构中,数据结点一般称为顶点,而边是顶点的有序偶对。如果两个顶点之间存在一条边,那么就表示这两个顶点具有相邻关系

栈 ( Stack)

先进后出的。在我们进行函数递归的时候,函数调用和返回的顺序,也是先进后出,所以,栈体现了递归的思想,可以实现基于递归的编程

队列 (Queue)

先进先出的数据结构,先进入队列的元素会优先得到处理.

在消息队列中,实现了生产者和消费者的松耦合,对消费者起到了保护作用,使它不容易被数据洪流冲垮。

编程语句

布尔表达式

体现了逻辑代数中逻辑和集合的概念

if(表达式) {函数体1} else {函数体2} // 若表达式为真,执行函数体1,否则执行函数体2。

循环语句

循环语句是迭代法(Newton's method)的体现

函数的调用

可以调用自己,也可以调用其他不同的函数。如果不断地调用自己,这就体现了递归的思想。

SQL 语言中的 Join 操作

Join 有多种类型,每种类型其实都对应了一种集合的操作

基础算法

算法复杂度分析

四则运算主次分明齐头并进排列组合一图千言时空互换

这些法则体现了数学中的运算优先级数量级多元变量图论等思想

总结

在平时学习编程的时候,你可以多从数学的角度出发,思考其背后的数学模型。

这样不仅有利于你对现有知识的融会贯通,还可以帮助你优化数据结构和算法

微信公众号

本文链接:

https://alili.tech/archive/97enyq3a3m/

# 最新文章