干货 | 学习算法,数据魔术师告诉你需要掌握这些编程基础(包含JAV...

程序猿声

共 2932字,需浏览 6分钟

 ·

2020-01-18 23:21

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


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


3d82e30134ffbe74263027b6bbb53509.webp


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


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


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

Java基础

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


432040c186d3560938a6c3f6d3adced0.webp

(点击可看大图)


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


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


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


33be863a3770a196a8e850f7638c387c.webp

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


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

C++基础

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


0c38a5ea9cbd94750c86037dc55f2809.webp

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


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


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


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


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


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


5d2ff2059748fde1a724435afeef6c05.webp

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


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

数据结构

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


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


cb598b5912492ae3403afb652433e5ff.webp


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


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

IDE的使用

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


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


282ab1bba70a30a8fdccf30569263351.webp


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


70c993e4a0689f08500aecc1e092b2ae.webp


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

算法进阶

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


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

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

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

最后再多说一句

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


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


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


36fcd56688a84adccec1cd6394010e0c.webp


优化选项选择速度优先:


6f03698623f50aad3c867ae39e90dee3.webp


再比如在devC++选择:


bd23ed89d2a682f02aecbd341650f307.webp


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

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


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


a5a91ebd622bb9fd0b084d23de82abd3.webp


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


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


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


END




 赞 赏 



长按下方二维码打赏感谢您,支持学生们的原创热情!



郑重承诺打赏是对工作的认可所有打赏所得都将作为酬劳支付给辛勤工作的学生指导老师不取一文



 
 47c2beddf07070b1402a284ed54aa1bd.webp






---The End---






文案 && 编辑:邓发珩审稿人:秦时明岳(华中科技大学管理学院)指导老师:秦时明岳(华中科技大学管理学院)

如对文中内容有疑问,欢迎交流。PS:部分资料来自网络。如有需求,可以联系:秦虎老师(professor.qin@qq.com)邓发珩 (华中科技大学管理学院本科三年级:2638512393@qq.com、个人公众号:程序猿声)


扫一扫,获取数据和模型还有更多算法学习课件分享哟


浏览 46
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报