3

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

 3 years ago
source link: https://alili.tech/archive/97enyq3a3m/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

2020-09-15

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

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

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

数组 (Array)

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

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

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

链表 (Linked List)

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

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

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

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

哈希表 (Hash)

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

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

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

树 (Tree)

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

缺点:算法复杂

图(Graph)

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

栈 ( Stack)

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

队列 (Queue)

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

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

布尔表达式

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

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

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

函数的调用

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

SQL 语言中的 Join 操作

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

算法复杂度分析

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

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

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

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

微信公众号

c2a91cfb597826a4b02b755746c300e00cc7728a9f5bac20bec538e8c76a443f.png

本文链接:

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK