热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

野生程序员初长成——记北大程序设计与算法专项课程

博客中的文章均为meelo原创,请务必以链接形式注明本文地址《程序设计与算法》是北京大学在Coursera上开设的一个专项课程。专项课程由6门课程构成,分别是计算导论、C程序设计、C++程序

博客中的文章均为meelo原创,请务必以链接形式注明本文地址

 

《程序设计与算法》是北京大学在Coursera上开设的一个专项课程。专项课程由6门课程构成,分别是计算导论、C程序设计、C++程序设计、算法基础、数据结构基础、高级数据结构与算法,外加一个编程毕业项目。专项课程没有假定任何先修知识,如果你对编程感兴趣或者羡慕程序员的高工资,你都可以学习这个专项课程来感悟编程的滋味。教授这些课程的老师都是北大的教授,所以课程的内容是毋庸置疑的。下面是教授专项课程的四位老师。

这6门课程,每门课程大致有6周的课程内容,真实对应于北大开设的三门课。所以不用说,这个专项课程还是有一定挑战的。

计算导论/C程序设计

前两门课主要介绍C语言,老师的设定是没有任何的编程基础,所以即便你是一个文科生也完全不必担心。如果你有一定的编程基础,就完全没有必要观看所有的视频了。其实这两门课程是我最后完成的,每门课程只是花了一个星期做作业。

通过公开课来学习编程语言最大的一个好处是,可以在学习到一个新的语法或者算法理论的时,编写程序来实践。这在英文里叫learning by doing,在看视频学习理论的时候你觉得课程明白了,但只有在写程序的时候你才会发现事实上并非如此。专项课程的每门课的每一周都有很有趣有富有挑战性的习题,是非常好的实践机会,所以我建议一定要仔细思考,然后独立完成,这样你的收获才会最大。

C++程序设计/算法基础

《C++程序设计》主要介绍了C++的一些语法,主要是C++面向对象的特性。由于是初次接触,时不时被一些概念给弄糊涂了,什么static、const总是傻傻分不清楚。这门课令我印象最深刻的要数课后作业,编写一个魔兽世界的对战游戏,这个游戏充分应用了C++面向对象的特性,算是对学习内容的一个很好的实践。写这个程序花费了整整两天的时间,800行代码,算是我写的单一项目里最长的程序了。但这还没完,这只是实现程序的逻辑,测试的时候就出现了一大堆的错误。这个程序的输出很长,以至于需要用一个两个文档对比的软件,来寻找错误的位置。又花费了整整两天时间,才把所有的bug搞定了。

《算法基础》介绍了一些基本的数据结构比如堆栈、队列、深度优先搜索以及算法的三种基本思想贪心、分治和动态规划。这门课主要是通过讲授例题的方式来教学的,这些例题往往是经典的ACM竞赛的题目,都有一些小小的难度。作业也一样很多都是来自ACM竞赛,有时一道题思索许久也没有思绪,我也咬着牙没有去搜索答案,第二天再想想课程由发现了其中的奥秘。这样当完全凭自己的努力完成一道题的时候,成就感不知不觉油然而生。

也正是这门课,把我带到了程序设计竞赛的道路,这门课的一个老师郭炜就是北大ACM教练。主要是完成这门课的课后作业,poj(北大ACM在线评测)上的排名就刷到了20000以内。在学校,IEEE举办编程竞赛也拿到了第10名的好成绩,要知道第一名可是参加过ACM全球总决赛的大神啊。

数据结构基础/高级数据结构与算法

《数据结构基础》和《高级数据结构与算法》主要介绍了树、图、栈与队列这些基本的数据结构,和基于这些数据结构的算法。其中的很多算法都是初次接触,到目前为止还有一个很关键的信息我没有说,在学习这一列课程的时候,我没有读过一本教材。但学习的过程中必然有,困惑不解的时候,这是我会去搜索其它学习者录制的视频。老师对这些问题烂熟于心可能忘记了困惑的时刻,这些初学者制作的视频就能把这些问题讲解地非常透彻。

与之同时课程的难度也在慢慢地攀升,光数据结构二叉树就衍生出红黑树、伸展树、B树、B+树、后缀树、Trie,而且相当一部分都不太符合直觉,难以理解为什么需要这样设计。好在课后编程习题并没有太过难为这些概念。

程序开发项目实践

专项课程的最后一门课在Coursera叫做Capstone,也就是毕业项目。毕业项目是完成一个搜索引擎,算是专项课程的高潮了。毕业项目有7个作业,每一个作业都给出了项目的框架,以及需要完成的功能。7次作业分别是对句子进行分词,不定长文档的存储,倒排表的存储,文档根据检索词进行打分,倒排表的二分查找,多个检索词的与或非操作以及检索表达式的转换。前4次作业跟多的是关于stream的操作,由于不熟悉stream的特征,总是掉进坑里;后3次更多的考察算法,需要实现一个有特殊要求的二分检索的函数和一个类似表达式求值的函数。在做毕业项目的时候,多数情况是很快就实现了要求的功能,提交到测试平台上得分却是个零蛋,然后苦恼地把项目的要求看了一遍又一遍,然后发现自己的理解似乎有些问题。据说毕业项目是腾讯合作设计的,完成之后有奖金和实习的机会。很幸运的是,我是第一个完成毕业项目的人,很期待接下来会发生什么!

2016年从1月开始,到6月的结束,我完成了第一个Coursera的专项课程。不知不觉,我也能够写上千行的代码,完成一个像模像样的项目了。一点一滴的学习,一步一步的成长,回过头来,才发现原来我收获了这么多。感谢精心设计专项课程的四位老师,以及帮助过我的助教们。

程序设计与算法专项课程 https://www.coursera.org/specializations/biancheng-suanfa

  • 计算导论 https://www.coursera.org/learn/jisuanji-biancheng 
  • C程序设计 https://www.coursera.org/learn/c-chengxu-sheji
  • C++程序设计 https://www.coursera.org/learn/cpp-chengxu-shej
  • 算法基础 https://www.coursera.org/learn/suanfa-jichu
  • 数据结构基础 https://www.coursera.org/learn/shuju-jiegou-suanfa
  • 高级数据结构与算法 https://www.coursera.org/learn/gaoji-shuju-jiegou
  • 程序开发项目实践 https://www.coursera.org/learn/biancheng-suanfa-biye-xiangmu

参考

http://ur.tencent.com/subs/articles?id=56

http://pkunews.pku.edu.cn/xxfz/2015-07/21/content_289854.htm


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • C语言常量与变量的深入理解及其影响
    本文深入讲解了C语言中常量与变量的概念及其深入实质,强调了对常量和变量的理解对于学习指针等后续内容的重要性。详细介绍了常量的分类和特点,以及变量的定义和分类。同时指出了常量和变量在程序中的作用及其对内存空间的影响,类似于const关键字的只读属性。此外,还提及了常量和变量在实际应用中可能出现的问题,如段错误和野指针。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了最长上升子序列问题的一个变种解法,通过记录拐点的位置,将问题拆分为左右两个LIS问题。详细讲解了算法的实现过程,并给出了相应的代码。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • C语言判断正整数能否被整除的程序
    本文介绍了使用C语言编写的判断正整数能否被整除的程序,包括输入一个三位正整数,判断是否能被3整除且至少包含数字3的方法。同时还介绍了使用qsort函数进行快速排序的算法。 ... [详细]
  • Linux的uucico命令使用方法及工作模式介绍
    本文介绍了Linux的uucico命令的使用方法和工作模式,包括主动模式和附属模式。uucico是用来处理uucp或uux送到队列的文件传输工具,具有操作简单快捷、实用性强的特点。文章还介绍了uucico命令的参数及其说明,包括-c或--quiet、-C或--ifwork、-D或--nodetach、-e或--loop、-f或--force、-i或--stdin、-I--config、-l或--prompt等。通过本文的学习,读者可以更好地掌握Linux的uucico命令的使用方法。 ... [详细]
  • 本文讨论了读书的目的以及学习算法的重要性,并介绍了两个算法:除法速算和约瑟夫环的数学算法。同时,通过具体的例子和推理,解释了为什么x=x+k序列中的第一个人的位置为k,以及序列2和序列3的关系。通过学习算法,可以提高思维能力和解决问题的能力。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
author-avatar
眼睛Blank
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有