数据结构是数据之间的逻辑关系,算法是你解决问题的思路。
好的数据结构与算法可以极大程度为了降低你解决问题的复杂度。
数据结构有什么用呢?其实数据无非就是增删改查的操作,操作都一样,你用任何一个数据都可以实现增删改查。但是不同的数据结构的增删改查操作的复杂度不同。
算法又该怎么思考呢?首先高级程序语言是模拟人的思考过程的。所以一个问题摆在你面前,首先你自己要想出方法会做,首先你要用人的思维来解决问题,暴力也好,找规律也罢,运用数学知识等等,首先你自己要先能有做出来的大致思路。
然后的话,还要思考问题和数据的类型
(1)是属于什么模型?数据是线性的还是树状的?从而来判断是用线性表还是树还是图。
(2)增删改查中操作比较多?这些操作具体集中再哪里?从而判断要表用栈堆还是其他,树要用二叉搜索树还是其他。
从而得到要采取什么合适的数据结构和算法来实现,找到适合机器来实现的方法。
然后我们还可以采用用空间换时间的方法优化算法,比如前缀和,提前计算好一些数据;比如循环中加上变量,这样就可以提前退出循环;比如开辟空间暂时存储结果等等。
另外还要注意语言实现时候的一些细枝末节:要提升速度的话还可以通过调用复杂度更低的api,将变量的定义移动到循环外使得不用重复创建变量等细节来提高运行的速度。
数据结构是与算法相互关联的,一个好的算法会依赖于一种合适的数据结构,比如一个算法如果涉及到末尾的插入和查询比较多,我们就可以考虑用栈。又比如关于溯源问题,就需要用到类似于并查集之类的符号,如果采用链表之类的,怎么也不可以达到使用并查集的复杂度。
其实后端的数据库设计也与数据结构有所关联,比如评论表,如果有父子评论功能,我们通常会再每个评论的后面设置父评论的id。如果是评论楼的结构,通常为了提高查找速度,还会设置最顶层父评论的id。别看这两个id,极大地提高了查找速度。
算法中有时候也就是因为一两个关键地变量,整个算法地性能得到极大的提高。