【灵魂 |数据结构与算法】 数据结构必备经法(开山篇),一起修炼算法经法!

在这里插入图片描述

🤵‍♂️ 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)

在这里插入图片描述

该文章收录专栏
[✨— 《深入解析机器学习:从原理到应用的全面指南》 —✨]

数据结构必备经法

目标

学习数据结构与算法的理由

  1. 大厂面试

比如 BAT、Google、Facebook,面试的时候都喜欢考算法、让人现场写代码。公司只能考察他们的基础知识是否牢固。社招就更不用说了,越是厉害的公司,越是注重考察数据结构与算法这类基础知识。相比短期能力,他们更看中你的长期潜力。

  1. 业务开发性能优化

对于大部分业务开发来说,我们平时可能更多的是利用已经封装好的现成的接口、类库来堆砌、翻译业务逻辑,很少需要自己实现数据结构和算法。但是,不需要自己实现,并不代表什么都不需要了解。

如果不知道这些类库背后的原理,不懂得时间、空间复杂度分析,如何能用好、用对它们?存储某个业务数据的时候,你如何知道应该用 ArrayList,还是 Linked List 呢?调用了某个函数之后,你又该如何评估代码的性能和资源的消耗呢?

作为业务开发,我们会用到各种框架、中间件和底层系统,比如 Spring、RPC 框架、消息中间件、Redis 等等。在这些基础框架中,一般都揉和了很多基础数据结构和算法的设计思想。比如,我们常用的 Key-Value 数据库 Redis 中,里面的有序集合是用什么数据结构来实现的呢?为什么要用跳表来实现呢?为什么不用二叉树呢?

如果你能弄明白这些底层原理,你就能更好地使用它们。即便出现问题,也很容易就能定位。因此,掌握数据结构和算法,不管对于阅读框架源码,还是理解其背后的设计思想,都是非常有用的。

而在面对新的问题或者业务场景中,也能够设计更好的方案来解决问题

在平时的工作中,数据结构和算法的应用到处可见。我来举一个你非常熟悉的例子:如何实时地统计业务接口的 99% 响应时间?
你可能最先想到,每次查询时,从小到大排序所有的响应时间,如果总共有 1200 个数据,那第 1188 个数据就是 99% 的响应时间。很显然,每次用这个方法查询的话都要排序,效率是非常低的。但是,如果你知道“堆”这个数据结构,用两个堆可以非常高效地解决这个问题。

  1. 提升代码水平(个人能力!)

达到开源水平的代码能力,高手之间的竞争其实就在细节。这些细节包括:你用的算法是不是够优化,数据存取的效率是不是够高,内存是不是够节省等等。这些累积起来,决定了一个框架是不是优秀。

何为编程能力强?代码的可读性好、健壮、还是扩展性好等等,其中性能好坏起码是其中一个非常重要的评判标准。而对代码的时间复杂度、空间复杂度分析才能写出高性能的代码

如果你在一家成熟的公司,或者 BAT 这样的大公司,面对的是千万级甚至亿级的用户,开发的是 TB、PB 级别数据的处理系统。性能几乎是开发过程中时刻都要考虑的问题。一个简单的 ArrayList、Linked List 的选择问题,就可能会产生成千上万倍的性能差别。这个时候,数据结构和算法的意义就完全凸显出来了。之前你可能需要费很大劲儿来优化的代码,需要花很多心思来设计的架构,用了数据结构和算法之后,很容易就可以解决了。

掌握了数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样。因为这样的你,就像是站在巨人的肩膀上,拿着生存利器行走世界。数据结构与算法,会为你的编程之路,甚至人生之路打开一扇通往新世界的大门。

核心数据结构与算法

核心学习数据结构与算法

10 个数据结构:数组、链表、栈、队列(线性表)、散列表、二叉树、堆、跳表、图、Trie树

10 个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法

对于每一种数据结构或算法学习它的**“来历”“自身的特点”“适合解决的问题”以及“实际的应用场景”**,千万不要被动地记忆,要多辩证地思考,多问为什么。如果你一直这么坚持做,你会发现,等你学完之后,写代码的时候就会不由自主地考虑到很多性能方面的事情,时间复杂度、空间复杂度非常高的垃圾代码出现的次数就会越来越少。你的编程内功就真正得到了修炼。

MergedImages

时间复杂度&空间复杂度分析

事后统计分析: 把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。(局限性大)

大O复杂度表示法:体现整体算法随着规模增大的趋势表现,也叫作渐进时间复杂度(asymptotic time complexity),简称时间复杂度。

  1. 只关注循环最多的一段 代码
  2. 加法原则:取量级最大的复杂度
  3. 乘法原则:取量级结果最大的
image-20231128154326858

分为两类,多项式量级非多项式量级。其中,非多项式量级只有两个:O(2^n) 和 O(n!)。
当数据规模 n 越来越大时,非多项式量级算法的执行时间会急剧增加,求解问题的执行时间会无限增长。所以,非多项式时间复杂度的算法其实是非常低效的算法。

空间复杂度分析:时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系。类比一下,空间复杂度全称就是渐进空间复杂度(asymptotic spacecomplexity),表示算法的存储空间与数据规模之间的增长关系。

查看循环最多的变量生成的一段代码

image-20231128154541062

常见的复杂度并不多,从低阶到高阶有:O(1)、O(logn)、O(n)、O(nlogn)、O(n )。几乎都是这些

其中还有四种复杂度分析方法

最好情况时间复杂度(best case timecomplexity)、最坏情况时间复杂度(worst case time complexity)、平均情况时间复杂度(average case time complexity)、均摊时间复杂度(amortized time
complexity)。

平均则是引入概率论,均摊则是平摊思想

  1. 数组和字符串:

    • 数组操作(插入、删除、查找等)

    前缀和算法 :

    1. 寻找数组的中心索引 (左边之和等于右边)(前缀和)

    排序:

    1. 搜索插入位置(查找相同值或插值) (二分查找)
    2. 合并区间 (排序 + 二维数组)

    十大排序

    • 字符串操作(反转、查找、匹配等)
    • 双指针技巧(快慢指针、滑动窗口等)
  2. 链表:

    • 单链表和双链表的基本操作
    • 快慢指针技巧在链表中的应用
    • 链表反转、环检测等问题
  3. 栈和队列:

    • 栈和队列的基本操作(入栈、出栈、入队、出队等)
    • 用栈解决的问题(括号匹配、逆波兰表达式等)
    • 用队列解决的问题(广度优先搜索等)
  4. 哈希表:

    • 哈希表的原理和实现
    • 哈希函数的设计和冲突解决方法
    • 哈希表在查找和去重等问题中的应用
  5. 树与图:

    • 二叉树的遍历(前序、中序、后序)
    • 二叉搜索树的性质和操作
    • 堆和优先队列的基本概念和应用
    • 图的表示方法和遍历算法(深度优先搜索、广度优先搜索)
  6. 排序和搜索:

    • 常见排序算法(冒泡排序、插入排序、快速排序等)
    • 高级排序算法(归并排序、堆排序等)
    • 二分查找和其他搜索算法的实现和应用
  7. 动态规划:

    • 动态规划的基本概念和解题思路
    • 斐波那契数列和背包问题等经典动态规划案例
    • 动态规划的优化技巧和常见变种
  8. 贪心算法:

    • 贪心算法的基本思想和适用条件
    • 贪心算法的经典案例(任务调度、区间覆盖等)
    • 贪心算法与动态规划的比较和区别
  9. 图算法:

    • 最短路径算法(Dijkstra算法、Bellman-Ford算法等)
    • 最小生成树算法(Prim算法、Kruskal算法等)
    • 拓扑排序和关键路径等问题
  10. 高级数据结构:

    • 并查集的原理和应用
    • 字典树和前缀树的基本操作和应用
    • 线段树和树状数组的实现和应用

在这里插入图片描述

						  🤞到这里,如果还有什么疑问🤞🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/216b72d4629e4dd8a98886c5e8bbcd18.png)🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/195456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Springboot的秒杀系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的秒杀系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&#xf…

【开源】基于Vue和SpringBoot的音乐偏好度推荐系统

项目编号: S 012 ,文末获取源码。 \color{red}{项目编号:S012,文末获取源码。} 项目编号:S012,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 音乐档案模块2.1…

easyrecovery2024最新破解版激活密钥

平时很多人都会把自己工作时,或者生活中的数据存储在我们的电脑上,很多时候,由于我们的误操作或者是其它某些问题,很容易就会误删除一些文件数据了,尤其是一些电脑出现故障,总是会导致数据丢失,…

linux 内核regulator

问题 在sys文件系统下没有生成cpu 调频的相关节点。 日志对比 [ 3.588745] cpu cpu4: Looking up cpu-supply from device tree [ 3.588753] cpu cpu4: Failed to get reg [ 3.588791] cpu cpu4: Looking up cpu-supply from device tree [ 3.588808] Failed to i…

智能优化算法应用:基于和声算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于和声算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于和声算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.和声算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

外贸建站是WP还是CMS?海洋建站教程指南?

外贸建站选WP还是CMS系统?外贸企业网站建站怎么做? 随着全球化的不断发展,越来越多的企业开始拓展海外市场,外贸建站成为了这些企业的必备项目。然而,选择使用哪种建站系统却是一个让人头疼的问题。那么,海…

ElementUI+vue+nodejs培训学校课程预约网站的设计与开发

该系统将采用B/S结构模式,前端部分主要使用html、css、JavaScript等技术,使用Vue和ElementUI框架搭建前端页面,后端部分将使用Nodejs来搭建服务器,并使用MySQL建立后台数据系统,通过axios完成前后端的交互,…

oops-framework框架 之 界面管理(三)

引擎: CocosCreator 3.8.0 环境: Mac Gitee: oops-game-kit 注: 作者dgflash的oops-framework框架QQ群: 628575875 回顾 在上文中主要通过oops-game-kit大家了一个新的模版项目, 主要注意项是resources目录下的两个文…

如何在安卓Termux中使用SFTP文件传输并结合内网穿透工具实现远程传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…

Jmeter的安装配置,性能测试编写

1、jmeter介绍 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一。 运行环境为Windows 10系统&#xff0c…

AI创作ChatGPT网站系统源码保姆级搭建部署教程+支持GPT-4图片对话能力

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

数据结构与算法-动态查找表

查找 🎈3动态查找表🔭3.1二叉排序树🏆3.1.1二叉排序树的类定义🏆3.1.2二叉排序树的插入和生成🏆3.1.3二叉树的查找🏆3.1.4二叉排序树的删除 🔭3.2平衡二叉树🏆3.2.1平衡二叉树的调整…

基于粒子群算法思想的电动汽车充放电策略-V2G模型-程序代码!

电动汽车充放电对电网的安全稳定带来影响,合理规划电动汽车充放电时间和策略是目前的研究热点。本程序仿真了汽车有序充电和无需充电两种案例,利用电动汽车合理消纳新能源电量,利用粒子群算法思想来求解模型,程序中案例丰富&#…

智能锁-SI522TORC522方案资料

南京中科微这款SI522目前完全PinTOPin兼容的NXP:RC522、CV520 复旦微:FM17520、FM17522/FM17550 瑞盟:MS520、MS522 国民技术:NZ3801、NZ3802 SI522 是应用于13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员。是NXP 公司针对&quo…

2.1 Linux C 编程

一、Hello World 1、在用户根目录下创建一个C_Program,并在这里面创建3.1文件夹来保存Hellow World程序; 2、安装最新版nvim ①sudo apt-get install ninja-build gettext cmake unzip curl ②sudo apt install lua5.1 ③git clone https://github.…

HarmonyOS 振动效果开发指导

Vibrator 开发概述 振动器模块服务最大化开放硬工最新马达器件能力,通过拓展原生马达服务实现振动与交互融合设计,打造细腻精致的一体化振动体验和差异化体验,提升用户交互效率和易用性、提升用户体验、增强品牌竞争力。 运作机制 Vibrato…

内衣专用洗衣机怎么样?好用又便宜的迷你洗衣机推荐

迷你洗衣机作为一种小型便捷的家用必备洗涤设备,一直都受到越来越多家庭的青睐。一台迷你洗衣机可以帮助我们解决很多麻烦,节省我们的很多时间。对于不少在外工作的人,往往是一个人住,买一台大型的洗衣机或许有点浪费资源&#xf…

JWT令牌的获取与过滤器Filter的使用

JWT,全称JSON Web Token(JSON Web令牌),是一个开放标准 (rfc7519)。它定义了一种紧凑的、自包含的方式,以JSON对象的形式安全地在各方之间传输信息。这种信息可以被验证和信任,因为它是通过数字签名实现的。…

专升本期间部分C语言程序整理

说明 这些程序是我在专升本期间在CSDN上上传的作业、练习等,仅为学习备考的一小部分程序,整理成一篇文章,方便专升本的学弟学妹参考。 时间:2021年~2022年专升本期间 字符串题 输入字符串提取 数字字符 并 求和 (4处…

WPS论文写作——公式和公式序号格式化

首先新建一个表格,表格尺寸按你的需求来确定,直接 插入--》表格 即可。 然后在表格对应位置填上公式(公式要用公式编辑器)和公式序号,然后可以按照单独的单元格或者整行或整列等来设置样式,比如居中对齐、…