趣味算法-01-跟着作者读《趣味算法(第2版)》下

简介: 本文是系列博客的第2篇,是听了陈老师的报告后的记录,主要包括如何学习算法。

1.如何高效学习算法

1.1初学者如何学习算法

如何想高效的学习算法,是一个问题,因为算法的内容的很多,很多人对深度学习,推荐系统,这些更感兴趣,基于框架,仿佛容易做出效果。如果上来就接触这些算法,很多人都会陷入顶层应用调参,如果想在这里提出一个创新,就很不好下手。

对此,陈老师给出的建议是:初学者需要先从基础算法学习,宽基础,精技术。同时学好数据数据结构和算法基础知识,这点是非常重要,很多工作想提升的人,也需要重新开始学习算法。

在计算机专业领域,数据结构与算法无处不在。数据结构与算法是各大名企的面试题。同时数据结构与算法是计算机的基本内功,学好数据结构与算法,不仅具有较强的分析问题、解决问题的能力,思维能力,还可以快速学习各种新技术,拥有超强学习力。数据结构与算法这些基本功很重要,尤其是大学生,一定要重视这门课,学的时候就学扎实。

1.2 学习算法的三种层次

如何衡量算法学习情况呢,可以分为如下三个层次:

1.会数据结构的基本操作和经典算法

2.会利用数据结构与算法,解决实际问题

3.熟练使用和改进数据结构,优化算法

这里的算法可以分为经典算法,实用算法,面试算法。

一些朋友通过学习,可以基于算法完成应用开发,但由于对数据结构和算法不够了解,如果想深入一些,就很困难了。如果对于想要进入大厂的同学,建议达到熟练使用和改进数据结构,优化算法的阶段,否则竞争力不够强。

1.3 如何高效学习算法

如何才能达到第3个层次呢,陈老师给出如下方案:

针对陈老师的讲义和汇报,这里复述下:

首先看书+看视频:看书要看图解较多的入门书,要易懂,太多公式推导堆积的书,未必适合大部分算法爱好者。如果看书可以明白,就可以动手操作了。否则可以结合视频,因为视频有解题过程,并能展现问题分析过程,还能对关键算法进行理解。同时非常重要的先分析,再动手,不要上来就写,算法的分析很重要。另外书中还有具有源代码,只有伪代码的方式其实很难有直观的讲解。总结下,就是学经典,多理解。

其次是解题+刷题:在基本入门之后,可以进行专项练习,比如动态规划,把这个领域的算法掌握好了,就可以,贪多嚼不烂,要不停的反思总结,分析最优算法。

最后是刷题+总结:另外很重要的问题是,通过专项刷题,总结常用的算法模板(是总结,而不是靠背题),然后要灵活运用,举一反三,因为不同问题的实现算法都是不同的,不断的练习,达到快速bugfree的地步(还是很难的)。

2.如何进行刷题

在对算法有基础的掌握后,刷题就很重要了,如何刷题呢,方法如下:

什么时候开始刷题:在一类算法学完后就可以刷这类的题了,如果不理解,就看书,如果书中不理解,就看题解,避免ctrl+cv大法。然后对相关题目进行刷题,比如学完贪心,就做贪心算法的题。另外需要注意的是,要先本地编译通过,然后测试用例通过再提交,避免在线多次提交,影响成绩。

在哪里刷题。:老师提供的刷题网站如下:

打比赛:Vjudge,POJ,HDU,Code Forces,洛谷

找工作:LeetCode 牛客网

在线测试系统OJ(Online Judge)

https://vjudge.net

提交结果类型:

AC Accepted 通过

WA Wrong Answer答案错误

TLE Time Limit Exceed超时

MLE Memory Limit Exceed 超内存

OLE Output Limit Exceed超过输出限制

RE Runtime Error运行时错误

PE Presentation Error输出格式错误

CE Compile Error编译错误

通过的不同的错误,可以辅助定位刷题时遇到的代码问题

提交不通过怎么办:

提交不通过是很常见的,即使测试用例通过,提交不通过是很正常的,因为测试用例仅仅是一两组数据,而后台有大量测试数据。遇到提交不通过,首先冷静,根据错误类型分析原因。

WA答案错:冷静分析算法逻辑,易错点,特殊情况判断等。

TLE超时:选择的数据结构和算法是否合适?是否有死循环?

如何判断是否超时:

看题目时要看数据规模、时间限制和空间限制,设计算法时是否超时超限,心中有数。如果限制时间为1s,则问题规模和时间复杂度之间的关系为:

n < = 11 时 O ( n ! ) n<=11 时 O\left( n!\right)n<=11时O(n!)

n < = 25 时 O ( 2 n ) n<=25 时 O\left( 2^{n}\right)n<=25时O(2

n

)

n < = 5000 时 O ( n 2 ) n<=5000 时 O\left( n^{2}\right)n<=5000时O(n

2

)

n < = 1 0 6 时 O ( n log ⁡ n ) n<=10^{6}时 O\left(n\log n\right)n<=10

6

时O(nlogn)

n < = 1 0 7 时 O ( n ) n<=10^{7}时 O\left(n\right)n<=10

7

时O(n)

n > 1 0 8 时 O ( log ⁡ n ) n>10^{8}时 O\left(\log n\right)n>10

8

时O(logn)

十分实用的对应关系,做算法分析与设计阶段可以特别考虑。

记录坑点:

这个坑点每个人遇到的都不一样,可以根据自己的刷题过程,进行整理记录。

3. 如何准备算法面试

如何准备算法面试:

首先这个过程是个持久战,需要1-2年的时间来积累数据结构和算法,这个时候,如果ACM铜牌之类的,就可以进大厂。如果没有竞赛,就需要现场可以快速的敲代码解决问题,想实现快速解决问题,需要1-2的积累,没有快速的办法。语言关比较快,成年人1-2月尽可入门,然后去做数据结构,做数据结构的过程中,就在用语言了。

如果有基础了,就可以进行面试准备了,花费1-3个月在leetcode进行刷题。

然后就可以模拟面试了,根据经验来说,大部分的面试往往都是简单的。

最后从技巧的角度来说,如果去某厂面试,还是有必要去针对这个企业,进行面试问题收集与模拟的,这样增加企业的面试通过几率。

相关文章
|
机器学习/深度学习 算法 数据挖掘
趣味算法-01-跟着作者读《趣味算法(第2版)》上
本系列博客主要阅读《趣味算法(第2版)》时的所听所想所感
趣味算法-01-跟着作者读《趣味算法(第2版)》上
|
机器学习/深度学习 算法
趣味算法-04-跟着作者读《趣味算法(第2版)》-贪心算法
本文是系列博客的第4篇,是听了陈老师的报告后的记录,主要包括如何学习算法。
趣味算法-04-跟着作者读《趣味算法(第2版)》-贪心算法
|
存储 算法 测试技术
趣味算法-03-跟着作者读《趣味算法(第2版)》-算法之美
本文是系列博客的第3篇,是听了陈老师的报告后的记录,主要包括如何学习算法。
趣味算法-03-跟着作者读《趣味算法(第2版)》-算法之美
|
13天前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。
|
13天前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
|
1月前
|
算法
基于模糊控制算法的倒立摆控制系统matlab仿真
本项目构建了一个基于模糊控制算法的倒立摆控制系统,利用MATLAB 2022a实现了从不稳定到稳定状态的转变,并输出了相应的动画和收敛过程。模糊控制器通过对小车位置与摆的角度误差及其变化量进行模糊化处理,依据预设的模糊规则库进行模糊推理并最终去模糊化为精确的控制量,成功地使倒立摆维持在直立位置。该方法无需精确数学模型,适用于处理系统的非线性和不确定性。
基于模糊控制算法的倒立摆控制系统matlab仿真
|
14天前
|
资源调度 算法
基于迭代扩展卡尔曼滤波算法的倒立摆控制系统matlab仿真
本课题研究基于迭代扩展卡尔曼滤波算法的倒立摆控制系统,并对比UKF、EKF、迭代UKF和迭代EKF的控制效果。倒立摆作为典型的非线性系统,适用于评估不同滤波方法的性能。UKF采用无迹变换逼近非线性函数,避免了EKF中的截断误差;EKF则通过泰勒级数展开近似非线性函数;迭代EKF和迭代UKF通过多次迭代提高状态估计精度。系统使用MATLAB 2022a进行仿真和分析,结果显示UKF和迭代UKF在非线性强的系统中表现更佳,但计算复杂度较高;EKF和迭代EKF则更适合维数较高或计算受限的场景。
|
16天前
|
算法
基于SIR模型的疫情发展趋势预测算法matlab仿真
该程序基于SIR模型预测疫情发展趋势,通过MATLAB 2022a版实现病例增长拟合分析,比较疫情防控力度。使用SIR微分方程模型拟合疫情发展过程,优化参数并求解微分方程组以预测易感者(S)、感染者(I)和移除者(R)的数量变化。![]该模型将总人群分为S、I、R三部分,通过解析或数值求解微分方程组预测疫情趋势。
|
16天前
|
算法 数据可视化 数据安全/隐私保护
基于LK光流提取算法的图像序列晃动程度计算matlab仿真
该算法基于Lucas-Kanade光流方法,用于计算图像序列的晃动程度。通过计算相邻帧间的光流场并定义晃动程度指标(如RMS),可量化图像晃动。此版本适用于Matlab 2022a,提供详细中文注释与操作视频。完整代码无水印。
|
1天前
|
机器学习/深度学习 算法
基于心电信号时空特征的QRS波检测算法matlab仿真
本课题旨在通过提取ECG信号的时空特征并应用QRS波检测算法识别心电信号中的峰值。使用MATLAB 2022a版本实现系统仿真,涵盖信号预处理、特征提取、特征选择、阈值设定及QRS波检测等关键步骤,以提高心脏疾病诊断准确性。预处理阶段采用滤波技术去除噪声,检测算法则结合了一阶导数和二阶导数计算确定QRS波峰值。