近年来关注计算机编程算法怎么学的用户越来越多,小编整理了关于刷了 1000 多道算法题,一点心得,系列之计算机编程和算法学习指南,学习计算机编程算法需要哪些数学知识?,左程云:程序员该如何学习算法?,数学专业学生,懂计算机编程方面的东西,喜欢算法,该如何学习,成为算法工程师?,编程算法怎么学?请是计算机专业的,现在已经进入IT行业的人士回答一下!,高中算法初步怎么在计算机上编程???,供您参考
大家好,我是鱼皮,今天分享一下自己刷算法题目的经验。程序员为啥要刷算法?因为 “卷啊”!开个玩笑,其实,算法题目已经成为了公司筛人的一种方式,大厂的每一轮面试基本都会有几道算法题,甚至有的公司笔试全部都是算法题。其他题目答的都差不多,那你算法题做不出来,可能就被淘汰了。所以为啥要刷算法题呢?一方面是帮助你学习和理解算法,但另一方面也是像背公式、背八股文一样,增加你面试时碰到原题的概率。我刷了 1000 多道题嘛,不夸张的说,在面试的时候 80% 的算法题都是原题。当然,每个人学算法、刷题的目标是不同的,首先 要明确你的目标,因为目标不同,刷算法的平台和方法也不同。常见的目标有以下四种:学习基本编程语法和思想想找大厂工作,应对面试算法竞赛锻炼自己的思维大部分同学的目标应该都是第二个。现在的程序员面试中,算法题目基本是必问的,所以,为了找到一份不错的工作,越来越多的同学意识到了刷算法的重要性,甚至有一些同学刚开始学编程,编程语言用的还不熟悉,就想着要提前刷算法准备起来了。先聊聊编程新手应该怎么刷题吧?编程新手刷题对于大一同学,大部分都是刚开始接触编程,所以刷题的目标应该更倾向于第一种,即帮助自己学习编程。LeetCode 确实是如今最火爆的算法刷题平台,但有一个很大的误区就是一上来就刷 LeetCode,对于编程小白来说,基础的编程语法、函数、面向对象都还不会呢,刷什么 LeetCode?学什么数据结构和算法!?如果基本的编程语法还不熟悉,我建议老老实实地做一些 基础练习题,应该大部分学校的老师都会布置课堂作业吧?比如我大一的时候基本就是在刷老师留的 OJ(Online Judge 在线判题平台)作业题目,不同于清华北大等一系列名校的 OJ,我们当时刷的题都比较简单,每道题目都是解决一个小问题,比如用 C++ 的 new class 来造汽车。目的是帮助同学们学习 C 语言、C++、Java 等基础语法,熟悉面向对象编程思想,所以比较容易上手。可能有同学觉得作业比较难对吧,其实学校布置的课堂作业大部分都很基础很基础,如果这都觉得难,我认为比起尝试网上的专业算法刷题平台,倒不如踏踏实实先把简单的作业题啃透和理解。这里我推荐 PTA 程序设计类实验辅助教学平台,上面提供了不少适合新手入门的简单练习题,比如基础编程题目集、浙大版《C语言程序设计(第3版)》题目集等。网址:PTA | 程序设计类实验辅助教学平台如果你已经能够使用一门编程语言开发简单的程序了,那就要 确定自己的下一个目标,为了通过面试刷算法?还是想挑战自我,参加竞赛呢?下面我针对不同的目标,来分别推荐一些资源。找工作刷题现在大厂面试基本每一轮都会考几道算法题目,因此,越来越多的小伙伴意识到刷题的重要性。其实,不需要关心太多平台,找工作刷题,选择 LeetCode 就够了,国内最全的算法刷题网站。地址:力扣很多朋友刚开始刷 LeetCode 可能都会怀疑自己的智商,比如我。我是一名计算机专业的学生,并且大一时还做过一些 ACM 题目,水到过一些小的比赛奖项,但是初次接触 Leetcode 时感觉仍然像是走进了一个船新的世界,感觉上面的题目自己无从下手。后来和别人交流才发现,原来我不是一个人,一头雾水才是刚开始刷 Leetcode 的正常情况!不过当我找到了诀窍后,渐渐发现 Leetcode 也没有那么恐怖。我是从大二开始刷算法的,每天坚持留 2 个小时,刷 2-3 道题目,大概过了一年,面试中的算法题目基本都可以迎刃而解!也帮助我拿到了一些大厂的 offer,最后入职鹅厂。我总共刷了 1000 多道算法题目,光在 Leetcode 上就有 600 多道(简单、中等各占一半),还刷了一些其他平台或书籍上应对面试的题目,比如《剑指 offer》、牛客、PAT 等,也都不错。刷了这么多道题目后,明显感觉自己的思维能力有了很大的提升,感觉 Leetcode 好像也没那么难了。回想最初被 Leetcode 搞到怀疑人生,还是自己没有找对方法吧~所以下面简单地分享下自己刷 LeetCode 的小技巧,希望大家少走弯路。1. 刷题顺序记住三个要点:从【学习板块 LeetBook】刷起,从【简单的】刷起,从【通过率高】的刷起!LeetBook 是 LeetCode 精心整理的算法和数据结构专项练习(以前叫探索,爷青结),每个专项对应一个重要的知识点,并通过一系列相关的题目带大家入门,相对自己零散地选题目来说,更加简单实用,还附有讲解,是入门的不二之选。像面试无非就那么几个重点:树、动态规划、深度 / 广度优先搜索、链表、数组、排序、栈、队列、哈希、字符串等。你要先完成专项练习中一些简单的题目,理解其背后的算法和数据结构。之后,再举一反三,练习更多相关的题目,当你能做到用同一个算法解决一类共性问题,做到 多题一解 时,才算是真正理解了。地址: Leetbook 专栏后,进入题库,利用 LeetCode 自带的题目筛选和排序功能,能够帮助我们由简单到中等再到困难,渐进式刷题。一般来说,先刷通过率较高的题目,相对比较容易。2. 利用题解LeetCode 的每道题目都有很多小伙伴给出了题解,讲述如何解决这道题。怎么才算利用题解呢?首先,读题解包括两个部分,读思路 和 读代码,既要理解作者做题的思路和逻辑,也要细致入微地学习他人代码中优秀的写法。即使这道题目你做出来了,击败 100% 了,我也建议去看看别人的题解,学习更多他人解题的思路,帮助自己打开脑洞,做到 一题多解。除了 LeetCode 自带的题解之外,网上有很多其他大佬整理的算法题解,各种编程语言的都有!比如全网疯传的谷歌大佬算法刷题笔记(C++ 语言):还有 Go 语言的算法题解:还有《数据结构 Java 语言描述》:以上资源都整理到我开发的【编程导航】中了,可在线免费阅读!地址:编程导航 - 发现优质编程资源话说,现在网上的题解实在是太多啦!在刷题时,读个一两份就行了,别给自己太大压力。除了看题解外,很多同学没有意识到,多写题解 才是真正的法宝,把自己的解题思路整理成文,或者讲给别人听。这样做不仅能够加深自己对题目的印象,进一步加深对算法的理解,帮助自己回顾解题过程,从而在面试的时候更容易复述;还能帮助到更多同学。甚至有一些厉害的同学通过记录和分享自己的题解,还没毕业,就已经出版了自己的书籍,年入几十万或者百万!哎嘿,我才发现自己当年写的一些题解阅读量也破千了,爷青回啊!3. 精益求精当你每次成功解题时,LeetCode 系统会生成一份解题报告,告诉你的程序在时间和空间上击败了多少用户。虽然答出题目就已经很棒了,但还不够。面试的时候,一些面试官就喜欢给你出题目的变种,或者要求你用更优的方式解出题目。所以,在保证完全理解题目解法的基础上,请不断优化你的代码,找到更多的思路和更优解,直到击败 100% 的用户吧。我们在工作中,虽然未必会直接和算法打交道,但学习算法对工作的帮助真的很大!解算法题时,我们要对多种算法分析复杂度,从中选择最优解。而在工作中,也是如此,一个需求有很多种实现方式,经常也要设计几种不同的方案,分析他们的成本、性能等差异,选择其中最好的一种进行实施。所以,请认真对待每一道算法题目,把它当成一个工程问题来解决,相信你的思维会逐渐打开,并逐渐掌握编写高性能程序的技巧。4. 参与竞赛我建议大家多参加算法竞赛,这里的竞赛不是指 ACM 区域赛那种大神级别的,别忘了此时我们的目标只是找工作。其实,LeetCode、牛客等网站每周都会开展一次线上算法竞赛,看看谁能在有限时间内最快最多地解题。在竞赛的过程中,紧张刺激的环境会使我们的精神保持高度集中,能够激发出我们的思维,从而在有限的时间内进行更多的思考,也能帮助我们适应面试的节奏。多多参加还有机会获得他们官方提供的奖励!虽然我这小菜鸡一次也没拿到 555。此外,参加蓝桥杯竞赛也是不错的,我自己也参加了两届,题目的难度和找工作要求的算法题目难度相当,也能发现自身的不足、激励自己进步吧。5. 考取证书这几年,PAT 计算机程序设计能力考试在逐渐升温,分为顶级、甲级、乙级三个级别。我亲身参与过甲级和乙级的考试,难度适中,虽然目前这个证书的含金量不高,但在备战考证的过程中,你有一个学习的目标,会更有动力坚持下去。在我看来,过程大于结果。网址: 看文章其实很多零碎的时间,大家也可以利用起来,看一些推送、文章之类的,比如我大二暑假坐高铁实习的路上就是看小灰的漫画来学算法,5 - 10 分钟一篇,这个时间不保证你能学会,但看了之后最少能让你对算法有个基础的印象。时间就像我脑袋里的水,挤一挤还是有的,想超过那些比你有天赋的人,就一定要利用好时间。算法竞赛刷题再聊聊目标成为算法竞赛大神的同学应该怎么刷题吧,不过这个话题,我确实不够专业。老实讲,我只在大一大二的时候参与过几场 ACM 算法竞赛,虽然没有拿到很好的成绩,但还是可以很负责任的告诉大家,算法竞赛的难度和需要的训练强度可不是一般的同学能承受的!想要拿到不错的竞赛成绩,至少要在以下任意一个 OJ 平台刷个几百题,而且确实也需要一定天赋(数学、逻辑、英语等),不然会更累。直接在编程导航搜索 OJ 可以直接看到所有的 OJ 平台,比如北京 POJ、浙江 ZOJ 等,都非常不错!地址:编程导航 - 发现优质编程资源至于什么时候可以停止刷题了呢?这也要看你刷题的目的,是找工作还是持续锻炼思维提升自己?我身边一些同事还保留着刷算法的习惯,但我找到工作后,对算法的态度就像是仇人了,不想见,能不见就不见。无论如何,刷题一定要拉长战线、养成习惯,每天最好固定一个时间,坚持做几道题目,比如我当时是每天早上还在床上躺着时,掏出手机看一道题目,然后闭着眼睛思考一会,想到解法后再起床敲。千万不要急于求成、爆发式刷题!而且除非你对算法很有自信,否则我建议找到工作前不要停止刷题。最后,万事开头难,希望大家不要怀疑自己的能力,更不要怀疑自己的智商。算法和编程语言学习一样,找对方法,付出努力,一定会有进步的!再送大家一些编程学习资料吧,我整理了各种视频教程 + 习题 + 答案 + 源码、可在线使用的编程导航、上千本编程书籍、几百份大厂面经、实战项目等,高达 6 T!上面提到的算法资料 PDF 也都在哦~送您 6T 的编程学习资源!我是如何在期间通过自学,拿到腾讯、字节等大厂 offer 的,可以看这篇文章,不再迷茫!我学计算机的四年,共勉!
以下仅代表个人观点,欢迎批评指正。前言:很同学在一年级上学期仅学习了计算机基础知识。但是对未来学习方向的把控和学习方法没有头绪。所以我在此给出建议。 我曾经按照学科领域把计算机学科划分为四大类:计算机科学(Computer Science)、计算机编程和算法(Computing)、人工智能( )、数据分析(Data Analysis)。首先我想分享一下我的学的学习路线,我的学科大类是计算机编程和算法(Computing)包含一部分数据分析。是的,我也希望你可以为你整理出这样的一个学习框架。其实你还应该细化到哪一年学习哪一样东西。这样可以提高效率。你想要学习一种计算机语言。我可以确信的说,计算机语言比英语要简单的多,纯文科记忆,一周背过格式和单次不就行了?现在我们反问自己,我真的是在学习语言吗?这东西不难呀?纯背诵的东西对于刚刚毕业的高中生来说,那不是很简单?所以,我们真正学习的是每一种语言之后对应的常用算法和常用的函数,以及快速构造函数的方法和容易采坑出bug的地方。我必须要说,计算机系的学生学计算机知识和非计算机系的学生学计算机知识是完全不一样的。你也能看到,这社会上连小学生都会编程,苹果更是推广“人人会编程”的时代。对于计算机系的学生,你们要承担的是未来中国乃至全世界科技发展的重任,要把知识学得无限的深入和全面(毕竟秃头的大有人在)。对于非计算机系的学生,当然建议是优先学好本专业,在此基础上,利用计算机这一现代化工具为自己的专业提供帮助,如虎添翼即可。举个现实的例子,大厂BAT对算法岗很感兴趣,其中不乏校招,在校招里面绝大多数都是本系的。为什么人人自诩程序员?只要会写个代码就叫程序员,当然程序员平均工资就被拉低了。我记得有一个打油诗如是说写字楼里写字间,写字间里程序员;程序人员写程序,又拿程序换酒钱。 酒醒只在网上坐,酒醉还来网下眠;酒醉酒醒日复日,网上网下年复年。 宁愿老死程序间,只要老板多发钱;小车大房不去想,撰个二千好过年。 若要见识新世面,公务员比程序员;一个在天一在地,而且还比我们闲。 别人看我穿白领,我看别人穿名牌;天生我才写程序,臀大近视肩周炎。 年复一年春光度,度得他人做老板;老板扣我薄酒钱,没有酒钱怎过年。 春光逝去皱纹起,作起程序也委靡;来到水源把水灌,打死不做程序员。 别人笑我忒疯癫,我笑他人命太贱;状元三百六十行,偏偏来做程序员。 但愿老死电脑间,不愿鞠躬老板前;奔驰宝马贵者趣,公交自行程序员。 别人笑我忒疯癫,我笑自己命太贱;不见满街漂亮妹,哪个归得程序员。 不想只挣打工钱,那个老板愿发钱;小车大房咱要想,任我享用多悠闲。 比尔能搞个微软,我咋不能捞点钱;一个在天一在地,定有一日乾坤翻。 我在天来他在地,纵横天下山水间;傲视武林豪杰墓,一樽还垒风月山。 电脑面前眼发直,眼镜下面泪茫茫;做梦发财好几亿,从此不用手指忙。 哪知梦醒手空空,老板看到把我训;待到老时眼发花,走路不知哪是家。 小农村里小民房,小民房里小民工;小民工人写程序,又拿代码讨赏钱。 钱空只在代码中,钱醉仍在代码间;有钱无钱日复日,码上码下年复年。 但愿老死代码间,不愿鞠躬奥迪前,奥迪奔驰贵者趣,程序代码贫者缘。 若将贫贱比贫者,一在平地一在天;若将贫贱比车马,他得驱驰我得闲。 别人笑我忒疯癫,我笑他人看不穿;不见盖茨两手间,财权富贵世人鉴。先别激动,除非你在里面不学习,不然你绝对不会成为这个样子。这样的人大多数是随随便便学了学计算机编程的皮毛,就自称程序员的人(大佬除外)。我个人可能对这些内容有点偏见:百度云盘2TB计算机好课、加wx领取程序员100本电子书、关注公众号领取原价4000元好课ect.如果你踩过坑你会发现,这全是营销内容。最后就是自己存了越来越多、越来越乱的资料,却基本上没有看,这是我最讨厌的。想要做一件事,就立刻做。不要说日后日后。人的一生相同的想法能闪几次?没有日后,现在不做,你这辈子就没机会了。好的,回归正题,无论你是计算机系的学生还是非计算机系的学生,你都可以按照我说的来,当然学习尺度你自己把握喽。以计算机编程和算法为例1.夯实基础注意,这不是时间线性的,你不必非要夯实所有基础再进行下一步(毕竟没个十年八载的弄不完。这是同步进行且选择性的。 我尤其推荐计算机黑皮书系列,这个系列有好几百本书。你需要哪一部分内容就读哪一部分。获取方式:自行百度找这本书的电子版。当然也可以花高价买实体书支持正版。2.明确学习目标并准备学习首先,你有没有问过自己:我为什么要学习这一门语言?必要性是什么?在同等领域它有什么优点?通过无限的查找资料,你需要明白:我要学的是什么东西、学习它的目的是什么、它难不难、出不出名、大众还是小众、学习要用多长时间、我要学到什么、遇到问题找谁解决、网上资料多吗、大家对它的评价如何、有什么优点、对我考研有什么帮助、对我未来找工作有什么帮助。(上岸最重要)确定笔记载体:可以纸质,不过不建议。推荐OneNote和印象笔记。当然如果能公开的话放在Github上或者你的自建博客里面也行平台支持的话建议使用Markdown格式文件。下载IDE,不同的语言自行百度,对于我是推荐使用Jetbrains全家桶。当然不嫌麻烦可以用Visual Studio。IDE是必要的,除非你是大神。3.开始学习在我看来,对于生,学习一门计算机语言和算法,要这样来:找到对应和课程:优先的听你们本校的专业课。如果你觉得学校讲的不够深入或者没有你预期的课程。中国慕课MOOC(网易主办的那个)欢迎你。 那些清华、北大、北理、北邮的课都有。我想强调的是,是生就要听生的课,而不是去网上随便找一个什么职场公开课云课堂之类的。里面授课的知识往往是深入的。强调强调强调。准备一本权威的书。对于C++,C++ Primer Plus 6还是不错的。使用语法字典:建议菜鸟教程或者W3CSchool,里面写的语法用法比较全。加强练习:练习是不可缺少的。如果有专门的系统讲解课程,我建议你在电脑上把屏幕分成两部分:左边习题讲解,右边是编程IDE来写代码。善于利用暂停键,边听编写,这对于我是最高效的学习方式。练习题可以买书成册的,也可以网上找。问题答疑:首先找百度、CSDN,有条件谷歌,最后问老师。你要学会分析问题,把问题分成一小部分一小部分,这样有助于你在网上找到相同的案例。CSDN上的解决方案很多。你要学会找到问题的本质,学会使用搜索引擎才行。我基本上很少问老师问题,因为这些问题我大多都能从网上找到答案,其他的可以自己摸索出结果来。我特别讨厌动不动就问我问题。尤其是半夜12点还给我打微信电话,嘤嘤嘤。项目实战:最终总要写几个实战的项目的。最后,我想说,学习计算机的路很长,没有耐心的话,难成大器。原文:系列之计算机编程和算法学习指南 -
离散很重要,因为集合论和图论,尤其是后者涉及得非常广泛。其他涉及得真的不多。要学好算法,一定要多打代码,多思考~~
大家好,我是左程云。我本科就读于华中科技、硕士毕业于在芝加哥。先后在IBM、百度、GrowingIO和亚马逊工作,是一个刷题7年的算法爱好者,也是牛客网的老师。2014年起专职做程序员算法和数据结构培训,代码面试培训,刷题交流等相关工作。 我是《程序员代码面试指南--IT名企算法与数据结构题目最优解》的作者 ,书籍涉及算法与数据结构编程题目240道以上,并且个人实现出最优解,大部分题目为面试高频。这篇我想写写算法的重要性、我个人是如何学习算法以及一些如何学习算法的建议。 算法在求职以及工作后的重要性 求职面试必考(校招+社招),且国内工资越高的面试中算法比重就越大。 我分别说一下国内和国外的行情。 · 国内的话,一般来讲,工资高的公司在面试时算法和数据结构题目的比重较大,工资一般的公司比重较小。当然同样公司的不同岗位,要求也会不同,但总体趋势就是 国内好公司爱考算法和数据结构 。这是目前国内互联网公司的情况。 国外的互联网公司呢,几乎只考算法和数据结构,很多年前就是这样了,一直如此。我相信国内会逐渐变得像国外一样,并不是崇洋媚外,而是算法和数据结构题目真的能考出东西。先抛开算法,我们来说说面试以及如何准备。面试中都会考什么呢? 面试中会考察算法,操作系统,数据库,计算机网络,编程语言,项目(校招涉及)/经历(社招中涉及的更多)如何准备? · 操作系统,数据库,计算机网络,编程语言这些都是平时学习,记住了,理解了,不忘记就可以了项目或者经历是平时准备的,如果马上面试了再去准备也是很难的,作假在面试中会直接被面试官看穿,所以这个平时就要准备好,如果是校招,那平时就要做一做有用的项目,如果是社招,平时在工作中就要用心做。 算法和数据结构,是真的需要好好写代码才能掌握,不是说看了理解了就真正会的了。算法笔试面试的特点就是没有特点,什么样的题都可能遇到,因为根本没有考纲,面试官就是普通的程序员,他们在工作中或者在网络上遇到什么题不错,就可能考,所以内容真的太多了,而且也无穷尽。这不是一个标准考试,这是能力考试。 所以,我建议大家面试或者笔试前抽出20%的时间去理解和记忆非算法和数据结构的题目,剩下的时间就是去刷题。今天学习算法变得越来越重要,虽然每个公司行业不同、岗位复杂,但算法能力强是分析能力和解决问题能力的提现。虽然计算机的处理能力越来越强,但好算法的代码执行效率相比起没有优化的代码,已经不能用快多少倍来描述了。计算机科学有自己的衡量标准,也就我们常说的复杂度标准。同时,学习算法对理解底层实现是非常重要的,优秀的程序员专注细节和底层,具备算法能力是起点更是基础。包括今天很多的领域,比如机器学习,深度学习,还有大热的AI领域,想要研究透彻,都离不开算法好的大脑。还有很重要的,加薪和跳槽,算法都起着非常重要的作用。学习算法可不仅仅是刷题,这一过程中自己的思维和想法的提升才是学习算法的最大好处。我是如何学习算法的? 本科在华中科技计算机,这一期间能在学业上让自己满意的可能就是没有挂科而已。硕士在芝加哥,出国之前就了解到想要在国外找工作的话,面试时几乎只考算法和数据结构的题目,于是开始了刷题,也就是搜集这方面的题,并且用代码实现出来,不断看题解和与高手讨论。 就这样从2010年到今天,刷了7年算法和数据结构的面试题。刚开始其实只是为了找工作才开始刷题,但是半年之后就变成了兴趣。刚开始刷题的过程中很不顺利,因为很多算法和数据结构,教材也不会讲。而且去网上搜各种各样的分析文章也读不懂,感觉基础差的很远。当时网上的分析文章,也不会像今天这么易懂,高手都是把最核心的点说出来,但是我没摸到人家想说的点之前,就已经不会了。于是就把很多很厚的书拿来啃,书上也看不懂就尽可能的找到高手向人家请教。对书上的题目实现了好几遍,才发现入了门,头脑也开始活泛起来。遇到不会的就查,发现一大片知识不知道就练。在网上发帖被嘲笑的日子,其实非常的涨见识,我很珍视那段岁月。当时在国外,学费也贵,因为钱的刺激和好胜心,居然没有让我变态,而是变成了一种斗志,用了大量的时间好好刷题。刚开始代码实现算法和数据结构的题目真的非常痛苦,因为这部分的内容相比其他方面的知识绝对算高门槛,而我最开始的基础也并不好。现在我经常在网上给同学们讲题,看到同学们表达的抱怨,那简直就是当年的我。暗暗发下心愿,如果有一天讲课,绝对做一个人人都能听懂的好老师。但不管怎么引导,算法学习都是一个脱皮换骨的痛苦过程,但好在会迅速上瘾,坚持半年之后就能一直坚持下去了。算法和数据结构问题的技术累积需要长时间的投入,因为内容又多又杂又难,很多算法是那种你很怀疑自己再来一辈子也可能想不到的解法。当时作为一个小白,一个算法的意思看懂了,实现起来是如此的难,测试用例总能指出我的幼稚;写了很多代码终于过了这一题,看到高手写的实现,自己又幻灭了,高手写的好棒,自己写的……然后收拾起碎裂一地的三观,重新出发。解了很多题目之后,类似的题目出现,自己还是会想很久。这让我意识到,自己缺乏总结,于是开始了总结的过程,也萌生了写书的冲动。刷完一道题其实是一件很难的事情,因为普通解法很容易,但是最优解真得去耐着性子研究好久,去查资料,去做优化,这个过程很漫长但是足够迷人。到底应该怎样学习算法,作为过来人,给大家的建议 先跟大家聊聊算法吧。在网络上流行一句话:算法分三种,竞赛的算法、面试的算法、算法。虽然我觉得这么分非常让人无语,但其实可以去这么理解,因为竞赛、面试和纯理论的要求和限制是不同的,所以算法在不同的要求中展现了不同的样子。对于竞赛来说,每道题对输入参数和样本量的要求都是非常明确的,同时规定的非常明确的还有空间的限制和运行时间的限制。每一个竞赛选手都非常熟练怎么根据这些提前给好的限制,反推出自己需要实现一个什么样复杂度的解法才能通过。每一行代码包含着前辈和自己思考过的优化。而对于面试来说,限制往往并不明确,造成这个现象的原因也很好理解。竞赛中当然是分数最重要。在面试的过程中,与面试官的交流和体现自己想事情的方式、体现自己逻辑的严密更重要。所以同一道题,在竞赛中必须写清楚限制,而在面试中一道题刚开始的限制没那么多,目的就是缩短你理解题目的时间,让面试者先写出一点什么,然后和面试官展开讨论,随着讨论的深入,再逐渐的把限制聊清楚。总之在面试的场合就是想看看你想问题的习惯、轨迹以及表达能力是否符合要求。当然,不管是什么要求下的算法,经常练习算法和数据结构题目对一个人在逻辑上的提升都是显而易见的,在学校参加ACM并取得很好成绩的同学,如果不是表达能力特别差的话,是一定会收获很多offer的,因为思维被锻炼的很好。对于算法,我给大家的建议: 先找到线团,然后进入线团里学着怎么玩。为了进入线团,需要先把基础知识掌握好。《算法和数据结构》(教材),你一定要看完+理解。这里面讲的都是不能再基础的东西了,觉得讲得不好,自己搜维基百科。没办法,如果坚持不下来,你后面就受罪去吧。然后有一些很经典的书可以迅速让你进入状态,比如我这本《程序员代码面试指南》,还有《剑指offer》,配合在线练习: 对于很庞大的算法,我个人的习惯是找例子来引导自己的思路,一点一点的接近算法的核心。唯一需要注意的是,一定要写代码,光看没有用的。对于经典算法的学习,大体上分成几个阶段:第一阶段:对于某一个具体的算法,首先要搞清楚这个算法解决的问题是什么,可能是实现一个具体的功能,也可能是在某些方面,比如时间复杂度或者空间复杂度方面很卓越,总之搞清楚这个算法被研究出来的目的是什么。 第二阶段:然后就要弄清楚这个算法的生存环境了,也就是看看你此时研究的东西是不是对别的知识有依赖,应该先把底层依赖的知识理解并掌握。这些问题都解决之后,就进入到算法本身的学习,理解一个算法是一件辛苦的事情,刚开始看必然会产生很多的困惑,比如经常会怀疑作者讲述的内容的重要性?这些内容和这个算法有什么联系呢?经常会有这种摸不着头脑的感觉,其实作者做的铺垫都是为了建立起描述算法主要内容的基础,只有接受和理解这些基础,才能逐渐触碰到算法的精髓,所以耐心是很重要的。 第三阶段:算法的主要过程看完之后,往往还是会感到困惑,主要是不知道这个过程好在哪,这就进入了下一个阶段,理解作者对这个过程在功能性或者效率卓越这件事上的解释和证明。这才真正触碰到算法最精髓的部分,也就是深度的理解算法的主要过程所带来的好处,这才是最锻炼人理解能力的地方。 第四阶段:上面几点是算法学习阶段的过程了,接下来就是研究算法的代码实现,自己设计测试用例亲自跑一下代码,以及从代码运行时间的角度分析这个算法的优势,这也是加深对算法的理解的过程。 第五阶段:最后是配合相应的题目练习,让自己通过题目练习的方式,会用、善用学习到的算法,并对这个算法产生一定的敏感程度,具体是指看到某些题目时,能够根据题目的特点,产生与该算法的对应,也就是具备举一反三的能力。 学习永无止境,不管是算法小白,还是有一定的算法基础,提升算法永远都是刚需,我正好要在牛客网即将开一个算法班,针对算法小白的初级班和有一定算法基础的进阶班,如果你想跟我一起学习,也欢迎你报名跟我一起探讨算法,希望所有努力和上心的人都能成为大牛。课程报名: 初级班: 进阶班: 当然,正值双十一,正好牛客网上有个双十一的活动,这样买会比较优惠:
首先至少是本科及其以上的学历,大多数是硕士学历及其以上;专业要求:计算机、电子、数学等相关专业;语言要求:英语要求是熟练,基本上能阅读国外专业书刊;必须掌握计算机相关知识,必须会一门编程语言。如此看来数学乃为逻辑,而算法最主要的就是逻辑清晰合理,并且简单易懂易处理。一个程序要求的不就是简洁,快速处理吗。所以个人认为要成为算法工程师,最主要的是逻辑思维要好,你学数学专业逻辑肯定不差。其实听你的介绍你离算法工程师已经很近了,缺少的就是训练了。你会数学,懂编程,这两点其实条件已经差不多了。剩下的就是找机会主动实训了。祝你好运
基础算法.一般都有学.高级的算法只针对高级的地方用.同样也需要更多的数学方面的知识.以前的计算机有一个分类叫.计算机应用.应用起来就是你到社会工作时你要应用的知识如.你以后要到软件公司里当程序员的话.那关键是如何实际功能.至于用什么算法.那是优化那一层的东西 各职业工作重点不一样.如.构架的.决定需求出来.用什么平台搭 . 功能间怎么联接.到分配不同程序做交互的.主要是.如何把功能展示给用户使用. 这一点用户体验非常重要.特别是应用而复杂或先进的算法.也有一些区别.如.搜索算法啦.其实也包含构架,还要让硬件配合,这要了解计算机目前的发展.如分部式怎么实现的.配合分部式的算法要怎么搞,还有就是研究发明性的算法..像.声音啦..视频啦.那个编码...那要的相关知识就越多了,专业的那些..数学公式.变成计算机的算法..我以前工作有遇到 什么快速傅式变换什么的.那些.都是以数学或物理上的原理弄的.我认人认为是特别应用.只有到了要使用了才去研究.而且.如果要做这样的专项研究.一人得具备多个专业或多位专业人士 合做.总结:做为计算的人员.了解了必要的硬件.网络.这些结构.如分部式怎么部的.路由.是怎么走的.原理.网络这么通信的..通信编码是怎么来的.这些了解了还有程序的原理.编译的原理.人和计算机怎么交互的.数逻上是怎么实现的.接着是基础算法.在计算机中怎么实现的.比乘法...数据结构要怎么样的.这样了解了计算机的实现方式..遇到数学公式.或其他算法时.你才能用程序实现.你也会知道怎么实现开销最少.效率快.在毕业后的发展可以选择.新的路.比哪.你要专注.视频编码的研究.那你就得把.图像与计算机成像.了解了.然后.再把光与计算机了了...那都是以后的路了.记算.算法多是因为.都有取舍..关键是在实现工作中应用.以上是我个人认为.无聊可以看看..不喜欢可以随便吐槽..哈哈
本人在编程上只学过C\C++\JAVA,其实高中学的算法在这三种语言都是不太一样的,如果你知道你需要编什么内容,有方法了。但是你还需要学习有关编程语言的一些基本内容。 只学了高中的算法那一点点不够的。。。 建议你可以找其他的编程语言看看。
如果以上内容没有帮到您,欢迎电话联系我们,或者联系在线客服咨询
只要一个电话
我们免费为您回电