谈一谈|对小白学习算法的建议

简介: 谈一谈|对小白学习算法的建议


前言

数据结构与算法是一门很重要的科目,在目前数据化时代也起着至关重要的作用,在以后面试以及工作中起着至关重要的作用。今天我们就来谈一谈数据结构与算法中的算法,在百度词条中,算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。通俗的来讲,算法就是解决某一实际问题的,如果一个小白想要开始学习算法,怎么做才能最高效呢?

 

必备基础

算法的特征:

有穷性(算法的有穷性是指算法必须能在执行有限个步骤之后终止)
确切性(算法的每一步骤必须有确切的定义)
输入项(一个算法有0个或多个输入,以刻画运算对象的初始情况

输出项(一个算法有一个或多个输出,以反映对输入数据加工后的结果

可行性(也称之为有效性)。

影响算法优劣的因素:时间复杂度,空间复杂度,正确性,可读性,健壮性(也称容错性)

这些基础知识掌握后,就继续看笔者学习算法的经验吧。

 

经验分享

笔者初学算法的时候是大一想要参加程序竞赛,让自己的大学生活不是那么颓废,然后就突然觉得学习算法挺有意思的,就学上了,所以兴趣是最好的老师,接下来进入正题。

我们要明确算法是有很多种,多到这一辈子都学不完,我们重点是掌握一些常用的算法,这些学会了以后小伙伴们可以根据自己的方向去钻研。以下这些就是算法学习之路必须攻克的关卡:排序类算法,动态规划,贪心算法,递归,回溯类算法。学好这些其实就两步,练习过后理解,理解过后再练习,如果觉得没掌握,就再来一次,反复着来,怎么都可以掌握,这是总体学习的方针。下面针对不同算法来做一下讲解吧。

 

排序类算法

笔者认为排序类算法是众多算法中最简单的一类算法,排序本质其实就是比较大小,不同的排序方法只是比较大小的方式有所差异,大家多理解其中的差异就可以很轻松地掌握不同的排序方法,面对众多的排序算法,就一下几种常用:冒泡排序,选择排序,插入排序,快速排序,堆排序。这些排序看理论很好懂,代码也好懂,大家稍微用一点心就可以看懂的。

 

动态规划

重点!在一类问题中,可能会有许多可行解。动态规划算法可以帮助我们在这些可行解里面找出最优解。其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中,最后通过这个表来得到最优答案。我们一起来看一道力扣平台上比较简单的动态规划题目:

输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组,求所有子数组的和的最大值。

示例1:

 

输入: nums = [-2,1,-3,4,-1,2,1,-5,4]

输出: 6

解释: 连续子数组  [4,-1,2,1] 的和最大,为 6。

在这道题里,目标是找连续子集的最大和,这道题我们创建数组dp吧,用dp[i]代表以元素 nums[i] 为结尾的连续子数组最大和。所以dp[0]为-2,dp[1]为max[dp[0],dp[0]+nums[1]], dp[2]为max[dp[1],dp[1]+nums[2]],一次类推,最后我们在dp里就找到了和题目相符合的解了,是不是很简单呀。解决了第一道此类型的题目后,以后的就会感觉轻松很多,练习再理解,理解再练习,反复着来,很快就会了。


贪心算法

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。都是最优解,那贪心和上面的动态规划有什么区别呢?动态规划最后得到的结果是从整体出发的,而贪心就是从局部,比如平时购物找零钱时,为使找回的零钱的硬币数最少,不要求找零钱的所有方案,而是从最大面值的币种开始,按递减的顺序考虑各面额,先尽量用大面值的面额,当不足大面值时才去考虑下一个较小面值,这就是贪心算法。动态规划则会求出所有方案。如需找零9元时,我们有1元,3元和5元的硬币,用贪心算法只会得到(5,3,1)一种结果,动态规划还可以得到(3,3,3)这第二种结果。

下面给大家一道经典的背包问题,大家自己研究怎么贪吧:

有一个背包,背包容量是M=150。有7个物品,物品不可以分割成任意大小。

要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。

物品 A B C D E F  G

重量 35 30 60 50  40 10 25

价值 10 40 30 50  35 40 30

 

 

回溯类算法

这类算法其实就是指深度优先搜索和广度优先搜索。这两种道理很简单,但是实际运用起来会很困难,先用下面的图来说明一下吧

我们要从A开始然后找到目标点D,我们可以沿着一种特定点进行移动,无法移动时再按照某种方式进行回溯。

 


如果是深度优先搜索,我们就按着一条线一直往下走,无路可走时再回溯到起点,此时就是A-C-F,再是(A)-(C)-E-G,最后是(A)-B-D,连起来就是A-C-F-E-G-B-D。(括号里是走过的点)广度优先搜索就是先走当前点可以走的所有点,再走下一个点可到的所有点,此时就是A-B-C,再(C)-E-F,再(B)-D最后(E)-G,连起来就是A-B-C-E-F-D-G这就是回溯类算法最基本的思想,想深入学习,大家就去力扣平台上练题吧

目录
相关文章
|
18天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
14天前
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR
阿里云人工智能平台 PAI 与复旦大学王鹏教授团队合作,在自然语言处理顶级会议 EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。
|
18天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
18天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
18天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
18天前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
18天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
18天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
18天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构的基本概念;算法的基本概念、特性以及时间复杂度、空间复杂度等举例说明;【含常见的报错问题及其对应的解决方法】
|
18天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之王道第2.3章节之线性表精题汇总二(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
IKU达人之数据结构与算法系列学习×单双链表精题详解、数据结构、C++、排序算法、java 、动态规划 你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!