学习【labuladong的算法笔记】算法笔记(2024.3.18)

这篇文章详细介绍了算法的本质,区分了数学和计算机算法的区别,数据结构中的数据元素关系、物理存储结构(数组、链表)和逻辑结构(线性、集合、树形、网状),以及基本操作如遍历和排序。还讨论了动态规划、时间复杂度等内容,适合初学者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【labuladong的算法笔记】【Hello算法】

【CSDN博主 刘鑫磊up 数据结构——学习笔记——入门必看【建议收藏】_数据结构笔记-CSDN博客

算法的本质

程序=数据结构+算法

算法 分两种

数学算法 本质是数学

计算机算法 本质是穷举

数据结构

数据结构:数据元素之间的关系

数据对象(父类)——数据元素(父类具象的实体)——数据项(不可分割的最小单位)(属性)

数据结构(数据的存储方式) 两种分类方式

1、物理结构/存储结构(面向计算机) 分两种

(1)连续/顺序(数组):

(2)分散/链式(链表):

2、逻辑结构(数据对象数据元素之间相互关系,面向问题) 分四种

(1)线性结构(一对一):数组(定长的队列)、链表、栈、队列

(2)集合结构(同属一集合外彼此无联系)

(3)树形结构(一对多):树、堆、哈希表

???堆是什么

(4)网状结构(多对多):图

【注】

基于数组、链表均可实现:栈、队列、哈希表、树、堆、图等

只能基于数组可实现:矩阵、张量(维度 ≥3 的数组)等

数据结构的基本操作

遍历+访问(修改)

遍历:线性——for/while          非线性——递归(树)

【注】递归题画递归树

基础数据类型

分两种 原子数据类型+结构数据类型

0、原子数据类型

CPU 可以直接进行运算的类型

如:

  • 整数类型 byteshortintlong 。
  • 浮点数类型 floatdouble ,用于表示小数。
  • 字符类型 char ,用于表示各种语言的字母、标点符号甚至表情符号等。
  • 布尔类型 bool ,用于表示“是”与“否”判断。

1、线性表(Linear list)

1.1链表
双指针

{详见 labuladong《双指针技巧秒杀七道链表题目》}

(1)两个指针各领一条链表

多个链表合并

单个链表分解

???双指针技巧秒杀七道链表题目→合并 k 个有序链表

(2)快慢指针(两个指针一前一后作用与同一条链表上,都从前往后)

不知道链表长度n,删除倒数第k个结点

不知道链表长度n,找链表的中点

判断链表是否包含环

???双指针技巧秒杀七道链表题目→两个链表是否相交

1.2数组、   队列(Queue);串、   栈(Stack)
双指针
(1)左右指针
(2)快慢指针
遍历

for/while

排序

C语言——十四种内部排序算法【插入排序 希尔插入 折半二分插入 二路插入 表插入排序 简单选择排序 直接选择 树形选择插入 堆排序 冒泡 快速 归并排序 基数排序 计数排序 桶排序】_c语言输入一组无序数据,分别使用直接插入排序、折半插入算法、冒泡排序、简单选择-CSDN博客

二叉树

遍历方式

常见的有四种

前序遍历 根结点 -> 左子树 -> 右子树

中序遍历 左子树 -> 根结点 -> 右子树

后序遍历 从左到右访问叶子结点 -> 根结点

层序遍历 从上而下逐层遍历,每层从左到右

遍历方式

常见的有2种

深度优先搜索DFS

广度优先搜索BFS

剪枝

alpha-beta 剪枝算法

算法思想

动态规划

题型:求最值(类比 运筹学最优化问题)

有三要素    重叠子问题 最优子结构 状态转移方程

解法(本质都是穷举):

1°明确不需要计算就能得到的情况

2°明确问题中的各种变量(三种变量  如背包问题  变量1{目标}物品总价值,变量2{限制}背包空余容量,变量3{选择}各种物品数量)

3°明确dp列表定义(难点)

(类比 数学归纳法:假设命题f在x<n-1成立→证明f在x=n时成立→f在任何时候都成立)

dp表写不出来,原因之一可能是dp表定理不合适

4°优化dp表等操作

最长递增子序列→二分查找解法

一些dp表可以→“备忘录” 

判断可否使用——一维(新手) 画递归树,若有重复节点,就可以使用“备忘录”

高维(熟练后) 看递归框架,有无重复节点

有一些题目,需要先转换,才能看出使用动态规划思想

回溯→见上文基础数据类型

时间复杂度

递归算法的时间复杂度:子问题个数 * 解决一个子问题需要的时间 即 O(2^n)  *  ≥O(1)

时间复杂度为指数级别原因:重叠子问题

解决方案:相当一部分可以使用 dp列表

还可以再压缩空间复杂度:如斐波那契数列 dp表只要长度为2即可

吐槽

2024.3.5开始创作

人在武汉念书,半吊子专业,感兴趣学点计算机

每天都是6小时水课2小时杂活,真的服气了

未读完文章

数据结构——学习笔记——入门必看【建议收藏】_数据结构笔记-CSDN博客

数据结构(全)-CSDN博客

数据结构——文件_对数据结构中文件的理解-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值