趣味算法-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版)》-算法之美
|
1天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
14天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
146 80
|
2天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
2天前
|
算法
基于龙格库塔算法的锅炉单相受热管建模与matlab数值仿真
本设计基于龙格库塔算法对锅炉单相受热管进行建模与MATLAB数值仿真,简化为喷水减温器和末级过热器组合,考虑均匀传热及静态烟气处理。使用MATLAB2022A版本运行,展示自编与内置四阶龙格库塔法的精度对比及误差分析。模型涉及热传递和流体动力学原理,适用于优化锅炉效率。
|
7天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
10天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。
|
6天前
|
算法
基于梯度流的扩散映射卡尔曼滤波算法的信号预处理matlab仿真
本项目基于梯度流的扩散映射卡尔曼滤波算法(GFDMKF),用于信号预处理的MATLAB仿真。通过设置不同噪声大小,测试滤波效果。核心代码实现数据加载、含噪信号生成、扩散映射构建及DMK滤波器应用,并展示含噪与无噪信号及滤波结果的对比图。GFDMKF结合非线性流形学习与经典卡尔曼滤波,提高对非线性高维信号的滤波和跟踪性能。 **主要步骤:** 1. 加载数据并生成含噪测量值。 2. 使用扩散映射捕捉低维流形结构。 3. 应用DMK滤波器进行状态估计。 4. 绘制不同SNR下的轨迹示例。

热门文章

最新文章