学习算法,你需要掌握这些编程基础(包含JAVA和C++)短短的路走走停停

小伙伴们好呀!可爱的小编又来了。最近放寒假了,相信各位小伙伴已经做好满满的计划打算在寒假实现弯道超车。

这么美好的一段长假,不用来学习是在是太暴殄天物啦!

加上经常有小伙伴来问小编,学习算法需要掌握哪些编程语言?代码怎么学啊好难啊?是学Python好还是matlab好?

这些问题实在没有办法一一回答,所以今天我们就来聊一聊,学习算法需要掌握什么样的编程知识吧~

值得注意的是,本文面向的对象是算法的学习群体,包括公众号上的启发式算法和精确式算法。因此编程上的知识我们只是强调“够用”即可,这样才能将更多精力放在算法的设计以及优化上来。

基础知识核心原则是“有用”,学习完基础后应能快速上手写一些简单的算法。学习知识参照知乎上@沈世钧给出的路线图:

在学习java的过程中,网上有很多可参考的视频,大家动手搜集一下即可。而关于书籍,确实有很多,但同时也很杂,在这里小编推荐一本《Java核心技术卷I》,一本书吃透足以。

在学完基础以后,可以尝试自己动手做一个小项目巩固一下编程能力,同时把握比较大型的程序开发。****可以做一个小游戏之类的,在这里推荐一下小编此前做的一个小游戏:

不过该程序的代码框架可能不是那么漂亮,有兴趣的小伙伴可以重构一下。

注意到C++我是放在java后面的,因为说实话对新手而言C++要比Java难上一点。C++内容实在是太多太多太多了……网上曾流传过一个21天精通C++的秘籍:

因此建议可以先学习C++基础,和java一样,学完基础后续内容有需要再查询即可。

首先是C的基础部分:数据类型、变量、内存布局、指针基础;字符串、一维数组、二维数组;一级指针,二级指针,指针数组和数组指针;结构体、文件的使用等。

然后是C++部分:面向对象编程思想;类的封装,构造和析构、静态成员、对象管理;类的构造(有参构造函数、无参构造、拷贝构造、默认构造函数)和析构;对象动态管理、友元函数、友元类、操作符重载;

类对象的动态管理(new/delete);友元函数和友元类;运算符重载;类的继承、多继承及其二义性、虚继承;多态;虚函数、纯虚函数、抽象类(面向抽象类编程思想案例);函数模板、类模板,模板的继承;

C++类型转换;C++输入输出流(标准I/O文件I/O字符流I/O);C++异常处理(异常机制、异常类型、异常变量、异常层次结构、标准异常库)。

学完了这些基础,我相信你已经成仙了,嗯没错!然后可以在写一个小游戏加强一下,比如小编此前写的一个AI贪吃蛇的小游戏:

当然该程序也不是那么完美,有兴趣的小伙伴依然可以重构一下。

数据结构的重要性不言而喻,这是所有编程语言中最应该学习的部分,程序组成的基础之一,更是算法不可或缺的内容。

包括:顺序存储、链式存储、循环链表;****双向链表、栈(顺序和链式)、队列(顺序和链式);栈的应用、树基本概念及遍历、二叉树;排序算法、并归算法、选择、插入、快速、希尔等。

当然,这里推荐一本程杰的《大话数据结构》,虽然这本书被网上很多人吐槽错漏百出。

但就从小编的视角而言,这本书对新手朋友还是非常友好的,起码是还能学下去的。有基础的同学也可以去看严奶奶的数据结构,不过这个确实很枯燥。

什么是IDE?就是一个集成开发环境,在上面你可以随心所欲coding,因此配置一个好的开发环境还是蛮重要的。

对于Java而言,最出名的就是eclipse了,eclipse最大的优点就是免费(以后不知道)。当然也有很多小伙伴在用IntelliJIDEA,这个东西是收费的,用起来也顺手得多,不过小编还未使用过哈~看大家喜好吧。

对于C++,可以选择Windows平台的VC系列:比如VisualStudio2013,VisualStudio2015,VisualStudio2017,VisualStudio2019。现在VisualStudio有社区版也就是免费版了,说是宇宙最强IDE也不为过,调试功能真是太强大了。我又想起当年做项目写代码调bug的种种情境,真让人泪目。

另外还有一些高级编辑器可以选择Notepad++,EditPlus,vscode等。当然,这都是一个coder的标配啦。

有了上面的编程基础,你已经能应对大部分的算法场景了,接着就可以开始学习一些常用的算法。之后就可以上手撸项目撸论文了。学习内容参考:

关于为什么选择C++和java,而不是Python或者matlab,小编已经解释很多遍了。那只学C++或者java一门可以吗?小编之所以建议两手抓,是因为C++和java都有着非常显著的优点。

对于C++而言,速度相当快,快到你怀疑人生。可能此时会有读者有疑问,小编骗人,有时候明明感觉C++慢的离谱。那是因为你IDE的编译模式用的是debug,编译也没有开优化之类的。

比如在visualstudio中,选择release模式:

优化选项选择速度优先:

再比如在devC++选择:

然后你会发现程序快了N倍不止。

对于java而言,最大的优点是兼顾速度和易用性。速度总体上和C++是一个量级的,但终究还是比不过变态的C++。

但java用起来非常方便,比如调用cplex,只需要导入一个jar包配置好dll就可以随心所欲了。而C++又要导入头了,又要链接库了,对小白而言简直是噩梦,比如:

而且java一个类一个文件,不像C++一个类有一个头文件一个CPP文件我真是头大。对于java和C++小编都用来开发过超一万行代码的大型算法,所以对他们之间的优缺点算得上深有体会的,也绝不是空口无凭瞎比比哦。

最后,值得注意的是C++和java的内存管理方式等区别,深浅拷贝等概念要熟悉,不然真的会疯掉的(gotcrazy!)。

最后的最后,祝大家在新的一年学有所成****也祝小编好运多多,心想事成,嘿嘿!

THE END
1.算法入门详解树的遍历: 二叉树的前序、中序和后序遍历就是递归算法的经典示例。 图的搜索: 图的深度优先搜索(DFS)和广度优先搜索(BFS)都可以使用递归算法实现。 动态规划: 在动态规划问题中,递归算法通常被用来定义子问题的状态转移方程。 分治算法: 分治算法将问题拆分为更小的子问题,通常通过递归算法来解决。 https://blog.csdn.net/weixin_44907888/article/details/132268886
2.算法笔记(三)算法学习技巧从开始学习算法已经有两三个多月的时间了,从简单到深入层次展开,层层优化,对算法的理解也在逐渐加深,不在那么片面,虽然现在还是片面一些,对它的了解也仅仅知道冰山一角,还有很多的内容需要我们去学习去挖掘。 思路 在学习前我们要尽可能快速阅读一遍要学习的书籍,这样不仅仅让我们知道了有哪些内容需要学习,同时也在https://www.code456.com/article/3598351.html
3.理解AI所需学习的15个基本数学理论1. 线性代数:矩阵运算、向量空间、特征值与特征向量等概念,这些都是机器学习算法的基础。 2. 概率论与统计学:理解随机变量、概率分布、期望值、方差等概念,这对于处理不确定性和进行预测至关重要。 3. 微积分:导数、积分等概念帮助我们理解函数的变化率以及求解极值问题,是优化算法的核心。 https://www.jianshu.com/p/496558c86b1e
4.高中数学单元教学设计(精选5篇)关注学生在数学语言的学习过程中,是否对用集合语言描述数学和现实生活中的问题充满兴趣;在学习过程中,能否体会集合语言准确、简洁的特征;是否能积极、主动地发展自己运用数学语言进行交流的能力。 2、正确评价学生的数学基础知识和基本技能 关注学生在本章(节)及今后学习中,让学生集中学习算法的初步知识,主要包括算法的https://www.ruiwen.com/jiaoxuesheji/8242675.html
5.学好机器学习需要哪些数学知识?腾讯云开发者社区除流形学习需要简单的微分几何概念之外,深层次的数学知识如实变函数,泛函分析等主要用在一些基础理论结果的证明上,即使不能看懂证明过程,也不影响我们使用具体的机器学习算法。概率图模型、流形学习中基于图的模型会用到图论的一些基本知识,如果学习过离散数学或者数据结构,这些概念很容易理解。 https://cloud.tencent.com/developer/article/1179238
6.科学网—[转载]强化学习在资源优化领域的应用2.2 强化学习算法基础 根据智能体在与环境交互过程中具体学习的内容,可以把无须对环境进行建模(即model-free)的强化学习算法分为两大类:直接学习动作执行策略的策略优化算法(如REINFORCE)和通过学习一个值函数进而做出动作执行决策的值优化算法(如Q-learning)。 https://blog.sciencenet.cn/blog-3472670-1312677.html
7.软件工程专业培养方案(2022)3.专业技术基础知识。程序设计、算法与数据结构、数据库原理与技术、操作系统、计算机组成原理、计算机网络原理与技术、、数字电路与逻辑设计等。 4.软件工程专业知识。软件工程概论、UML建模、Java EE编程、Java EE框架技术、软件项目管理与案例分析、软件测试技术等。 https://www.csust.edu.cn/jtxy/info/1302/20908.htm
8.Core基础知识学习路线开发实战编程技巧练习学习视频【C#/.NET/.NET Core学习、工作、面试指南】记录、收集和总结C#/.NET/.NET Core基础知识、学习路线、开发实战、编程技巧练习、学习视频、文章、书籍、项目框架、社区组织、开发必备工具、技术前沿周刊、常见面试题、面试须知、简历模板、人才招聘、以及自己在学习和工作中的一些微薄见解。希望能和大家一起学习,共https://github.com/YSGStudyHards/DotNetGuide
9.入门人工智能需要学习哪些基础知识?不要求到精通的程度,但最少你要了解,起码在后续的学习中碰到这个知识,就算你不熟,也知道可以去哪里找到这个知识学。 数学基础 数学对于人工智能的学习至关重要,我们需要理解和应用相关的模型算法,有了数学基础,可以帮助我们理解算法模型背后的数学原理,以及后续在训练模型或者评估模型时涉及的计算过程。 https://zhuanlan.zhihu.com/p/666172193
10.腾讯算法岗武功秘籍(上)2 腾讯面经涉及基础知识点 2.1 图像处理基础 2.1.1 讲解相关原理 ● Canny、Scharr、Sobel 边缘检测 ● HOG 特征 ● Hough 变换 ● 图像匹配算法了解哪些? ● SIFT 特征了解吗?是怎么生成的?SIFT特征是怎么进行匹配的?(OpenCV中常用的是暴力匹配函数,即对两组SIFT特征向量,将一组中的每个向量依次与另一组的所https://www.flyai.com/article/930