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

前言

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

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

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

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

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

Java基础

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

当然大家可根据自己的学习能力调整学习时间,正常而言6周内搞定这部分内容应该是完全没有问题的。能力强的一个月也能很快搞定这部分基础知识。

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

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

传送门:分享 | Java实现的大球吃小球游戏

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

C++基础

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

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

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

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

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

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

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

传送门:10分钟教你用C++写一个贪吃蛇附带AI功能(附源代码详解和下载)

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

数据结构

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

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

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

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

IDE的使用

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

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

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

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

算法进阶

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

干货 | 想学习优化算法,不知从何学起?

干货 | 运筹学从何学起?如何快速入门运筹学算法?

干货 | 公众号“数据魔术师”算法代码分类整理:Show you the code!

最后再多说一句

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

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

比如在visual studio中,选择release模式:

优化选项选择速度优先:

再比如在devC++选择:

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

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

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

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

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

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

posted @ 2020-04-10 12:58  短短的路走走停停  阅读(2274)  评论(0编辑  收藏  举报