Design of Computer Programs
课程简介
学习新的概念,模式和方法,来拓展你的编程能力,进而帮助你从一个新手成为一个专家程序员。
我需要知道什么?
课程假设之前要有编程经验,应相当于 Udacity CS101教学内容范围。
我会学到什么?
向成为一个专家程序员的道路前进。在本课中,你将通过一系列的练习,实践从问题描述到问题解决的过程。
教学大纲
赢得牌局(Winning Poker Hands)
- 程序设计过程的步骤,程序开发的清晰性和通用性。
- 论证程序的正确性,测试和模拟。
- 设计的权衡;简单性和清晰性。分解和组合。
信封背面(Back of the Envelope)
- 信封背面的计算(找张纸打草稿):何时使用穷举法,何时使用聪明的方法。
- Zebra puzzle:生成器表达式,排列和组合。
- Cryptarithmetic(一种单词的算术);递归和期望的思考;最长回文子串算法。
正则表达式,其他语言和解释器(Regular Expressions, other languages and interpreters)
- 定义正则表达式的语言,解释这个语言。
- 定义被1个正则表达式匹配的字符串集合。
- 其他语言。
通过搜索处理复杂度(Dealing with complexity through search)
- 搜索:利用手电筒或船,找到你的方法。
- 分析算法的效率。
- 递归关系,匹配数据类型与算法。
通过概率处理不确定性(Dealing with uncertainty through probability)
- 概率:小猪游戏。
- 最大化期望效用以优化策略。
单词游戏(Word Games)
- 管理复杂度。
- 大型的单词集合。
- 适当的数据结构
课程总结(Conclusion)
- 测试和实践考试。
课程导师
Peter Norvig是Google的Director of Research。他也是美国人工智能协会及计算机协会的会员。他是流行教材《人工智能:一种现代方法》的合著者。加入Google之前,他是NASA Ames研究中心的计算科学部主任。
翻译:@new652 编辑:欢仔258