为什么要学习数据结构和算法?

菜园前端
• 阅读 286

原文链接:https://note.noxussj.top/?source=helloworld


为什么要学习数据结构和算法?

它对我们开发和程序有什么帮助?

像我们平常都是使用框架和库进行开发的项目的,我们也不太可能去修改库和框架的内部代码,那我们应该如何优化我们的程序,要从哪方面入手呢?可以通过数据处理的操作进行优化,数据处理就会涉及到数据结构和算法的相关内容。

我们的程序一般都是由数据结构和算法结合得到的一个产物(数据结构 + 算法 = 程序),数据结构为算法提供服务,算法围绕数据结构操作。

现实生活举例

数据结构:计算机存储、组织数据的方式,就像生活中的锅碗瓢盆。

算法:一系列解决问题的清晰指令,就像食谱,你做出来的菜好不好吃,取决于你的食谱。在程序里面就代表了,你写出来的程序的性能的优劣。

常见的数据结构

有序数据结构

  • 数组
  • 队列
  • 链表

无序数据结构

  • 集合
  • 字典

树形数据结构

常见的算法

链表

  • 遍历链表
  • 删除链表节点
  • 双指针

树、图

  • 深度优先搜索
  • 广度优先搜索
  • 递归

数组

  • 冒泡排序
  • 选择排序
  • 插入排序
  • 归并排序
  • 快速排序
  • 顺序搜索
  • 二分搜索

常见的算法设计思想

  • 分而治之
  • 动态规划
  • 贪心
  • 回溯

什么是算法?

算法( Algorithm )是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。

那么我们应该如何去衡量不同算法之间的优劣呢?

主要还是从算法所占用的「时间」和「空间」两个维度去考量。

  • 时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述
  • 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述

因此,评价一个算法的效率主要是看它的时间复杂度和空间复杂度情况。然而,有的时候时间和空间却又是「鱼和熊掌」,不可兼得的,那么我们就需要从中去取一个平衡点。

可是,我们的代码都还没有运行起来,我怎么能预知到代码运行所消耗的时间和空间呢?由于运行环境和输入规模的影响,代码的绝对执行时间是无法估计的。但是我们却可以预估出代码的基本操作执行次数和额外占用的空间。

接下来会分别介绍一下「时间复杂度」和「空间复杂度」的计算方式。

点赞
收藏
评论区
推荐文章
凯特林 凯特林
3年前
Vue 项目性能优化—实践指南
Vue项目性能优化—实践指南前言Vue框架通过数据双向绑定和虚拟DOM技术,帮我们处理了前端开发中最脏最累的DOM操作部分,我们不再需要去考虑如何操作DOM以及如何最高效地操作DOM;但Vue项目中仍然存在项目首屏优化、Webpack编译配置优化等问题,所以我们仍然需要去关注Vue项目性能方面的优化,使项目具有更高效
复杂度分析:如何分析、统计算法的执行效率和资源消耗
我们都知道,数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间。所以,执行效率是算法一个非常重要的考量指标。那如何来衡量你编写的算法代码的执行效率呢?这里就要用到我们今天要讲的内容:时间、空间复杂度分析。
万木春 万木春
1年前
高效易用的C++单元测试框架:轻松构建高质量代码
单元测试是构建稳定、高质量的程序、服务或系统的必不可少的一环。通过单元测试,我们可以在开发过程中及时发现和修复代码中的问题,提高代码的质量和可维护性。同时,单元测试也可以帮助我们更好地理解代码的功能和实现细节,从而更好地进行代码重构和优化。
Wesley13 Wesley13
3年前
EL、JSTL
一、EL、JSTL  首先我们要明白为什么要使用EL(ExpressionLanguage表达式语言)、JSTL(JSPStandardTagLibraryJSP标准标签库),jsp页面完全可以用java代码取代他们,也就是说本来是可以没有这两种技术的,但是我们实际开发中,有一个原则:页面中不应该出现java代码。因为满篇的<%%和jav
Wesley13 Wesley13
3年前
Java数据结构和算法(四)——栈
前面我们讲解了数组,数组更多的是用来进行数据的存储,纯粹用来存储数据的数据结构,我们期望的是插入、删除和查找性能都比较好。对于无序数组,插入快,但是删除和查找都很慢,为了解决这些问题,后面我们会讲解比如二叉树、哈希表的数据结构。  而本篇博客讲解的数据结构和算法更多是用作程序员的工具,它们作为构思算法的辅助工具,而不是完全的数据存储工具。这些数据结构的生
Wesley13 Wesley13
3年前
Java数据结构和算法(一)——简介
本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子。  编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱。一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数据结构和算法的人也能编程。但是如果一个开车的人懂变速箱的原理,比如降低速度来获得更大的牵引力,或者通过降低牵引力来获得更快的行驶速度。那么爬坡时使用1档,
菜园前端 菜园前端
1年前
什么是分而治之?
原文链接:什么是分而治之?在我们前面有学习过一系列数据结构、以及相关的一些算法,包含排序、搜索算法。而本次学习的分而治之它不是数据结构,也不是一种算法,而是算法设计中的一种方法,可以理解为是一种思想。我们可以利用这种思想去设计很多种算法。分而治之是将一个问
京东云开发者 京东云开发者
6个月前
SpringBoot如何优雅的进行参数校验(一)
SpringBoot如何优雅的进行参数校验一.为什么要进行参数校验在日常的开发过程中,我们常常需要对传入的参数进行校验,比如在web前后端分离项目中,参数校验有两个方面:前端进行参数校验后端进行参数校验那这两种有什么区别呢?只完成一个可不可以呢?答案是不可