干货 | 学习算法,数据魔术师告诉你需要掌握这些编程基础(包含JAV...
共 2932字,需浏览 6分钟
·
2020-01-18 23:21
小伙伴们好呀!可爱的小编又来了。最近放寒假了,相信各位小伙伴已经做好满满的计划打算在寒假实现弯道超车。
这么美好的一段长假,不用来学习是在是太暴殄天物啦!
加上经常有小伙伴来问小编,学习算法需要掌握哪些编程语言?代码怎么学啊好难啊?是学Python好还是matlab好?
这些问题实在没有办法一一回答,所以今天我们就来聊一聊,学习算法需要掌握什么样的编程知识吧~
值得注意的是,本文面向的对象是算法的学习群体,包括公众号上的启发式算法和精确式算法。因此编程上的知识我们只是强调“够用”即可,这样才能将更多精力放在算法的设计以及优化上来。
Java基础
基础知识核心原则是“有用”,学习完基础后应能快速上手写一些简单的算法。学习知识参照知乎上@沈世钧 给出的路线图:
(点击可看大图)
当然大家可根据自己的学习能力调整学习时间,正常而言6周内搞定这部分内容应该是完全没有问题的。能力强的一个月也能很快搞定这部分基础知识。
在学习java的过程中,网上有很多可参考的视频,大家动手搜集一下即可。而关于书籍,确实有很多,但同时也很杂,在这里小编推荐一本《Java核心技术 卷I》,一本书吃透足以。
在学完基础以后,可以尝试自己动手做一个小项目巩固一下编程能力,同时把握比较大型的程序开发。可以做一个小游戏之类的,在这里推荐一下小编此前做的一个小游戏:
不过该程序的代码框架可能不是那么漂亮,有兴趣的小伙伴可以重构一下。
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!)。
END
赞 赏
长按下方二维码打赏感谢您,支持学生们的原创热情!
---The End---
文案 && 编辑:邓发珩审稿人:秦时明岳(华中科技大学管理学院)指导老师:秦时明岳(华中科技大学管理学院)
如对文中内容有疑问,欢迎交流。PS:部分资料来自网络。如有需求,可以联系:秦虎老师(professor.qin@qq.com)邓发珩 (华中科技大学管理学院本科三年级:2638512393@qq.com、个人公众号:程序猿声)