❶ 学数据结构(C++)有什么值得推荐的好书
远标老师以前推荐我看《数据结构》可以拿来入门。然后可以根据自己的实际情况来安排怎么样学习数据结构。很多人是看一遍书,然后在遇到算法之后再去实现它。在这里列出一些我知道的算法书籍,以供参考。(我也只看过算法导论,编程之美)
1. CLRS 算法导论
算法网络全书,只做了前面十几章的习题,便感觉受益无穷。
2. Algorithms 算法概论
短小精悍,别据一格,准经典之作。一个坏消息: 同算法导论,该书没有习题答案。好消息:习题很经典,难度也适中,只需花点点时间自己也都能做出来。不好也不坏的消息:我正在写习题的答案,已完成前三章,还剩九章约二百道题,顺利的话二个月之后发布。另有中文版名《算法概论》,我没看过,不知道翻译得怎么样。如果有心的话,还是尽量看原版吧,其实看原版与看中文版花费时间不会相差很大,因为大部分时间其实都花费在做习题上了。
dr. dobb's essential books on Algorithm and daba structure
3. Algorithm Design 算法设计
很经典的一本书,很久之前看的,遗憾的是现在除了就记得它很经典之外其它都忘光了。
4. SICP 计算机程序的构造和解释
六星之书无需多言,虽然这不是一本讲算法的书,但看完此书有助于你更深入的理解什么是递归。我一直很强调习题,看完此书后你至少应该做完前四章的太部分习题。否则那是你的遗憾,也是作者的遗憾。
5. Concrete Mathematics 具体数学
有人说看TAOCP之前应该先弄清楚这本书的内容,要真是如此的话那我恐怕是看不到TAOCP了。零零碎碎的看了一大半,很多东西都没有时间来好好消化。如果你是刚进大学不久的本科生,有着大把的可自由支配时间,那你幸运又幸福了,花上几个月时间好好的读一下此书吧,收获绝对大于你的期望值。
6. Introction to The Design and Analysis of Algorithms 算法设计与分析基础
很有趣的一本算法书,有许多在别的书上找不到的趣题,看完此书绝对能让你大开眼界,实在是一本居家旅行,面试装逼的必备佳作。
7. 编程之美--微软技术面试心得
虽说是一本面试书,但如果把前面十几页扯掉的话,我更愿意把它看作是一本讲解题思维的算法小品。在书中,作者通常是给出一个平常解法,然后再一次又一次的优化改进,你可以很清楚的看到基本的算法设计思想是如何得到运用以解决实际问题的。如果你已经有了一些算法的基础,看完本书应该能使你的算法应用能力得到一定的提高。另外,本书生动有趣,也同样适合于初学者。
8. Fundamentals of Algorithmics 算法基础
也是很久之前在学校图书馆借来看的,内容记不太清楚了,只隐约记得此书的动态规划章节犹为出彩。应该是很经典的一本书,个人以为足以和算法导论等所谓当世经典平分秋色,但是怎么好像被人提到的不多,或许是我孤陋寡闻了。
9. How to solve it 怎样解题
二十世纪最伟大的数学思想家之一波利亚的力作,讲一般性的解题方法:怎么认识问题,怎么转换问题,怎么解决问题,如何在问题中得到启发,如何找到一个通往答案的方向。
10. Programming interviews exposed 程序员面试攻略
一本消遣之作。个人以为要比国内的某“XXX面试宝典”纯粹一些,至少也有一些启发性的内容,而不单单是面试题解库。
11. Programming Pearls 编程珠玑
学习算法不仅需要像Alogrithms,算法导论这样的重量级的内功心法,像《编程之美》、《编程珠玑》这样的轻量级的轻功身法也必不可少。前些年网上不是很流行像“给你10亿个数,找到最大的n个”或者“给你10亿个数,找出现次数最多的那个数”之类的网络面试题吗?看了此书你就知道怎么解决了。相比于《编程之美》来说,本书中的示例技巧性略低一些,但是也更有实际应用价值一些。
12. 算法艺术与信息学竞赛
如果算法导论是九阳神功,那这本无疑就是九阴真经。本书是专为参加一些诸如ACM之类程序设计比赛的同学而写的,江湖人称“黑书”。里面讲的都是一些在编程比赛中常用的算法、数据结构,以及一些数论和计算几何等。我虽然并不搞竞赛,但也从此书中受益颇多。
13. An Introction to Probability Theory and Its Applications
准备看的,现在才发现概率论有多么重要,可惜本科的时候没有好好学。前不久一个同学问我个问题,我半天弄了一个程序给他,他说:这里就不是相关系数么,Excel一下就完事!我晕,我还真不知道那就是相关系数。
14. Numerical Analysis
这本的作者是Richard L. Burden,J. Douglas Faires
数值分析,讨论各种数值算法,比如插值、拟合、积分、微分方程的求解、线性和非线性方程组求解等。准备详细看。
15. TAOCP 计算机程序设计艺术
传说中的TAOCP,说的人多,看的人少。TAOCP四卷堪称是算法藏经阁中的易筋经或者是少林七十二绝技。天下武学,尽出少林,天下算法,尽出TAOCP也。这点你可以顺便翻开一本算法书看看他的引用文献就知道了。我只读了第四卷的部分章节,前三卷暂时还没敢看,还在读书计划表中被无限期搁置。
❷ 孩子为什么一定要学习scratch编程
2007年5月,一款革命性的免费编程工具开始向公众开放,它就是我们的主角——Scratch。这样的工具究竟有怎样的魔力,能够吸引全球的青少年学习编程呢?
其实在Scratch设计开发之初,麻省理工媒体实验室的开发者们就以设计出让即使是没有学习过任何编程语法的人也能够设计出合适的产品的编程语言为目标。而这个任务的产物就是我们的Scratch啦!在这样的一个完全使用图形化设计和拖拽式编程的系统中,即使是完全没有学习过编程语言的人也可以轻松地设计出能够完成特定目标的程序来。
所以,朋友们,当你还不知道它是什么的时候,已经有一些人开始默默地带着自家孩子学习了。。。
❸ 计算机基础知识对程序员来说有多重要
非常重要,必须认真学习。
学习基础知识从来都是枯燥的,而且很多时候会给我们一个错觉,就是基础知识没有用。这主要是因为,我们未来工作以后,更多的是面向应用,更直接的就是面向工具的使用,基础知识基本是不可能直接拿出来用的,所以,大家就会觉得我只要懂应用方面的知识就好了,基础知识根本不需要去学。
就拿程序员来举例:
很多的程序员培训机构,他们并不会教任何的基础知识,直接就是教编程语言,然后设计一些案例做练习,3个月-6个月基本就结束。这样教出来的程序员能够写代码吗?当然是能的,不然这些培训机构早垮了。而很多大学本科4年读完的应届生,说不定写代码都没有这些培训几个月的学生强,大学4年对于程序员来说难道就是白费吗?
并不是的。
基础知识决定的是你未来的高度,可能你作为一个初级、中级程序员,你不一定会用到数据结构、算法、编译原理。但初中级的程序员就是你未来几十年的全部吗?
如果是的,在你30多岁的时候,应该就会面对裁员了并且很难找到下一份工作。
程序员是一个干到老学到老的工作,每天都需要去学习一点新的知识,技术也是在不断的演进,需要去了解未来的技术发展方向,这样才能够一直产生价值。而基础知识是什么呢,就是当你对技术了解越深入时,越需要用到的东西。
例如:你要做大数据的工作时,你需要数据建模,需要在海量的数据中抽取自己需要的数据,还需要不影响系统的性能,运算速度更快。那么你就必须要了解算法,了解时间复杂度。如果你曾经大学时好好的学习了这些知识,并且时不时会温习一下,那么你更高更快的胜任这份工作。
但是,对于一个只是了解应用知识的程序员来说,他需要想办法学习你用4年时间堆积起来的知识,而且还不一定有可靠的老师能够教他。
再举个例子,现在华为需要一些技术人才,来做他方舟编译器的迭代,待遇非常可观。
而这时,对于懂数据结构、懂算法、懂编译原理的人来说,查的无非就是一些应用实践的知识,这些知识只要有基础、有环境,1-2周就可以上手。
但是对于只懂应用知识的人,他可能就是看都看不懂,华为也就不可能去招聘这样的人。
所以,程序员也是有高低之分的,有的年薪百万,有的年薪可能就十来万。谁不想拿百万年薪呢?可能他们也觉得某些知识没有用,所以没有去认真的学吧。
❹ 要不要给孩子选择一个少儿编程辅导班
关于少儿编程,我们先一起了解一下国外少儿编程的情况:
韩国:从2018年起将编程纳入小学正规必修课程;
美国:小学信息课程内容,几乎都是少儿编程类产品。(美国至少一半以上的高薪工作需要一些编程知识和技能);
英国:早在2014年规定将电脑编程学习纳入当地中小学必修课程, 学龄5岁以上的儿童必须学习电脑编程;
日本:2016年,日本政府将中小学校必修编程科目加入到了新的成长战略草案中;
新加坡:多所中小学推出编程学习项目;
而我们中国在今年3月,教育部公布的文件中表示,将在中小学设置编程课程,以推动编程教育的发展。
所以说,编程是孩子必须要掌握的一门技能,早一点学,将受益终身。报班学习编程是非常有必要的,对孩子未来都非常的有帮助,锻炼思维,培养技能
玩转创造力 《硬件与编程课程辅导班》
教学目标:培养学生运用编程软件在发明过程中应用能力和鹅逻辑思维能力
教学内容:硬件编程SCRATCH图形化编程软件,使用基于ARDUINO图形化编程的电子元器件和复杂电路。
❺ ACM国际大学生程序设计大赛(ICPC)
需要跟自己学校联系,一般都是通过指导老师网上报名
一、ACM/ICPC竞赛介绍
(一)有关ACM
美国计算机协会(Association of Computing Machinery, 简称ACM) 创立于1947年, 是一个世界性的计算机从业人员专业组织,也是世界上第一个科学性及教育性计算机学会,同时它也是全球历史最悠久和最大的计算机教育和科研机构。目前ACM提供的服务遍及100余国家,会员人数达80,000多位专业人士,涵盖工商业,学术界及政府单位,并有近1000个机构会员。 ACM致力于发展信息技术教育、科研和应用。全球计算机领域的专业人士将ACM 的出版物和会议记录视做最具权威和前瞻的领导者。
(二)有关ACM/ICPC
ACM/ICPC(国际大学生程序设计竞赛)是由ACM组织的年度性竞赛,始于1970年,是全球大学生计算机程序能力竞赛活动中最有影响的一项赛事,素来被冠以“程序设计的奥林匹克”的尊称,可以说是大学级别最高的脑力竞赛。它为参赛选手展示计算机才华提供了广阔的舞台,是着名大学计算机教育成果的直接体现,是信息企业与世界顶尖计算机人才对话的最好机会。
大赛开始至今已有30年历史,其涵盖的范围很广,大致划分如下:Direct(简单题),Computational Geometry(计算几何),Number Theory(数论),Combinatorics(组合数学),Search Techniques(搜索技术),Dynamic Programming(动态规划),Graph Theory(图论),Other(其他)。
大赛的比赛形式是:经过校级和地区级选拔的参赛组,于指定的时间、地点参加世界级的决赛,由3个成员组成的小组应用一台计算机解决6到10个生活中的实际问题。参赛队员必须在5小时内编完程序并进行测试和调试。此种大赛对参赛学生的逻辑分析能力、策略制定和脑力方面具有极大的挑战性。大赛提倡在压力较大的情况下,培养学生的创造力、团队合作精神以解决竞赛的问题,从而挑选和发掘世界上最优秀的程序设计人才。每届ACM/ICPC竞赛都是精英荟萃、新才辈出,因而倍受全球着名信息企业的高度关注,在过去几年中,APPLE、MICROSOFT和IBM等知名企业分别担任过竞赛的赞助商。
(三)ACM/ICPC在中国的发展情况
我国大陆高校从1996年开始参加ACM/ICPC亚洲预赛,前六届ACM/ICPC亚洲区选拔赛在上海设有赛区,由上海大学主办。2002年,第七届ACM/ICPC亚洲预赛在我国设有2个赛区:北京赛区和西安赛区。北京赛区由清华大学主办,西安赛区由西安交通大学主办。随着各高校参赛积极性的不断提高,大陆地区赛站从02年有所增加。至今,中国大陆地区2008年共设置5个赛站北京、哈尔滨、合肥、成都、杭州。
2008年4月,我校将举办2008大连理工大学 ACM/ICPC程序设计大赛(暨第二届ACM/ICPC东北地区赛大连理工大学校内选拔赛),望广大同学积极踊跃参与。
二、主办单位 学生处 校团委 创新实验学院 软件学院 三、承办单位 软件学院创新实践中心 四、协办单位 冠名/赞助企业 五、参赛队员和参赛资格
1.各参赛队员须为在校研究生一年级、本科学生。 2.以个人为单位参加比赛。3.所有参赛同学必须服从赛事组委会的统一管理。
4.报名资料应具真实性。
六、报名
(一)报名时间 2008年3月19日至2008年3月31日
(二)报名方式 登录软件学院网站http://sst.dlut.e.cn或创新实验学院网站http://tianwei.dlut.e.cn
下载《ACM/ICPC大学生程序设计大赛报名表》ACM竞赛报名表.doc
打印纸档交至如下地点(视报名情况定在现场赛前是否举行网络预选赛): 软件学院报名地点:创新实践中心(教学楼110)报名;
校部报名地点:ACM/ICPC协会( 研教楼814房间)
(三)咨询电话 0411-87571518;
(四)比赛时间 2008年4月19日 下午 13:30-17:30
(五)比赛地点 软件学院实验中心微机实验室 校部同学将在4月19日中午12:00在主楼毛主席像前发车前往软件学院参加比赛。
比赛结束后校部同学17:40在软件学院信息中心楼下坐车回校部。为了方便各参赛队员与组委会的联系,我们建立了QQ群,群号码:56867105 。希望通过即时通讯来为大家提供更多的方便的服务与帮助。
七、竞赛相关内容
(一)竞赛准备
ACM竞赛不要求使用某一种特定的语言,所以各个队伍可以根据语言的特点和自己的特长选择,如果对语言的原理语法和特点均能做到成竹于胸、滥熟于心,在比赛的过程中就可以大大缩短调试的时间,从而获得优势。
然而编程之道就如武学之道,语言只是各门各派的武功招式,算法和数据结构则好比内功心法和武学原理。内力深厚,任何招式到了手上都能够化腐朽为神奇;掌握了武学原理,更能做到无招胜有招。选手在竞赛中最重要的素质,正体现于对算法和数据结构的掌握和理解上,通过对经典问题的分析,掌握各种算法的应用范围和数据结构的作用与具体实现,是每个选手在平时学习中的重点所在。
(二)竞赛策略
临近比赛,在实力上已经难有质的提高,这时我们不妨将注意力转移到竞赛技巧方面,做不成武学道师也学个韦小宝。在ACM竞赛中,一般来说能成功解决半数或以上题目的队伍已经是相当优秀的,解决所有问题近乎天方夜潭,也就是说无论你的实力如何,都还有很大的改进余地,这其中比较重要的就是竞赛的策略。
(1)分工的问题:团队的配合十分重要,三个队员之间的合理分工可以大大改进解题的效率,根据队员的不同特点,不同的队伍可以采用不同的分配方式,其间一些细节的处理需要三个人有很好的默契。
(2)算法的选择:
在所有可行的算法当中,我们选择的应该是最可行的方法,而不是最高明的方法,这是竞赛与解决问题的一个重要区别,按照熟悉的程度由高到低选择一个算法,通过计算算法的时间和空间复杂度(在必要的情况下)和特殊的测试数据找出一切使该算法不成立的理由,如果找不到就确定该算法并选用相应的数据结构。在确定思路的时候注意比较常见的思维方式分析,比如逆向的分析,对称的分析等等。
(3)程序的编写:
最好首先编写输入和输出的部分,然后逐步细化,一个部分一个部分地填充调试,其间通过适量的注释来刻画程序的逻辑结构和特殊的技巧。在完成全部代码后用一般的测试数据验证代码的正确性,然后处理特殊的情况和边界问题,试图尽可能地找出错误的情况并加以改正。关于程序的优化主要考虑的是最坏情况下所用的时间是否满足要求,优化的程度以题目要求为准,足够即可,尽量避免使用指针和动态分配,在空间允许的情况下一律采用静态分配。
(4)调试中的问题:
调试中会遇到的许多问题需要在事前有所准备并定出总体设计,当然具体的情况还要临场分析,考虑的方面包括程序中的BUG,算法的正确性和数据结构的合理性,什么时候该放弃这个问题,什么时候该返回到先前放弃的问题,是否需要做到或已经做到足够的优化等等。所有关于调试的输入输出都不要删除,将它们注释起来即可。
(5)竞赛中的杂题处理
在竞赛中有时会出现一些新颖的题型,解决它们的算法很难归到经典的算法中去,每个这类的题都有自己鲜明的特点,对于它们根本没有一般的解法。对于这样的挑战,一个新颖的数据结构或一套特殊的循环或判断常常是必须的。解决这种问题的关键在于仔细地阅读题目的叙述,灵感经常来自于将叙述的逻辑条理整理得十分清楚之后,同样,对这类题的优化也是需要的,至少需要避免过多的循环嵌套。
(三)编程与竞赛
学习编程并不是为了参加竞赛,竞赛对于多数选手的意义还是在于参与,以及在备战过程中对自己的锻炼和提高。在这一点上,ACM竞赛和其它一系列竞赛是一样的,只是它的影响力和规模大些罢了,所以笔者希望对编程有兴趣的同学都能够关注竞赛,即使不参加,通过了解竞赛中涉及的编程知识达到课内很难达到的高度,这对每个人都是有益无害的。
ACM主页:http://www.acm.org/