2015级--学期安排 (第二学期)

来自问题求解
跳转至: 导航搜索

基本要求

  • 理解数据抽象,理解并能够应用常用的数据结构。
  • 掌握重要算法设计策略以及算法设计与分析的基本方法。
  • 理解并能够应用支持上述内容的离散数学工具与方法。

注意:程序设计能力要求贯穿于整个课程,不再单列。

指定教材

  • CS: Cliff Stein et al.: Discrete Mathematics for Computer Scientists, 1st ed. Addison-Wesley, 2010
  • DH: David Harel et al.: Algorithmics - The Spirit of Computing, 3rd ed. Addison-Wesley, 2004
  • DW: Douglas West: Introduction to Graph Theory, 2nd ed. Pearson, 2000
  • ES: Edward Scheinerman: Mathematics - A Discrete Introduction, 2nd ed. Brooks/Cole, 2005 (第24节:鸽巢原理)
  • JH: Juraj Hromkovic: Algorithmics for Hard Problems - Introduction to Combinatorial Optimization, Randomization, Approximation, and Heuristics, 2nd ed. Springer, 2002
  • SB: Sara Baase et al.: Computer Algorithms - Introduction to Design and Analysis, 3rd ed. Addison-Wesley, 1999 (第2章:抽象数据类型)
  • TC: Thomas Cormen: Introduction to Algorithms, 3rd ed. MIT, 2009
  • TJ: Thomas Judson: Abstract Algebra - Theory and Applications, http://abstract.ups.edu/
  • UD: Ulrich Daepp et al.: Reading, Writing, and Proving - A Closer Look at Mathematics, 1st ed. Springer, 2003
  • WS: Walter Savitch: Problem Solving with C++, 7th ed. Addison Wesley, 2008

推荐课外读物

  • Kenneth H. Rosen: Discrete Mathematics and Its Applications, 7th ed. McGraw-Hill, 2011

学习周历

日期 论题 学习目的 阅读材料 引导要点 书面作业 编程任务
2016-02-25 2-1:算法方法
  • 通过具体示例了解算法设计的基本策略
  • DH第4章
  • 理解复杂算法背后的简单原理
  • DH第4章练习1、2、8、9、11、12、13、14
  • WS第5章项目16
2016-03-03 2-2:算法正确性
  • 理解并能够区分程序错误与算法错误
  • 理解算法正确的概念及其证明方法
  • DH第5章
  • 算法正确性证明与一般数学定理证明的异同
  • DH第5章练习4、6、8、9、10、11、12、13、14
  • WS第6章项目3,你如何确定你的程序算法没有错误
2016-03-10 2-3:算法的效率
  • 理解算法的时间复杂性的概念与渐进表示方式
  • DH第6章
  • 从无限与有限的角度正确理解算法复杂度
  • DH第6章练习1、2、3、10、11、15、16
  • WS第7章项目3
  • WS第7章项目5
2016-03-17 2-4:组合与计数
  • 掌握在算法分析中常用的计数原理与方法
  • CS第1章
  • 为什么算法分析中需要计数
  • CS第1.1节问题9、13
  • CS第1.2节问题15
  • CS第1.3节问题6、9、14
  • CS第1.5节问题8、10、15
  • 任给k个元素的字母表;编程输出所有可能的组合串,且每个串中没有重复字母。如果可以任意某一个或多个字母可重复的次数,修改你的算法。复杂性是否会增加?
2016-03-24 2-5:分治法与递归
  • 掌握利用分治法设计算法的思路
  • 深入理解递归在算法设计中的作用
  • TC第4章
  • 策略在计算机算法设计中的意义
  • TC第4.1节练习5
  • TC第4.3节练习3、7
  • TC第4.4节练习2、8
  • TC第4.5节练习4
  • TC第4章问题1、3、4
  • Strassen算法
2016年3月31日 2-6:递归及其数学基础
  • 进一步理解递归的数学基础
  • 更深入地掌握递归算法的分析方法
  • CS第4章
  • 如何解递归式
  • CS第4.1节问题16、17
  • CS第4.2节问题8、11、17
  • CS第4.3节问题9、13、16
  • CS第4.4节问题1、4、6
  • CS第4.5节问题8、9、10
  • WS第10章项目10
  • WS第10章项目13
2016年04月07日 2-7:离散概率基础-1
  • 理解离散概率的基本概念
  • 掌握简单离散概率计算的基本方法
  • CS第5章第1、2、3、4节
  • 正确理解期望值,由此建立算法分析中期望效率理解的基础
  • CS第5.1节问题6、10、11、12、13
  • CS第5.2节问题2、9、10、14、15
  • CS第5.3节问题3、4、8、11、12、13
  • CS第5.4节问题5、6、8、10、17、20、21
  • 利用一个现成的随机数生成函数,模拟3个色子的试验;加大试验次数,比较试验结果与理论概率分布
2016年04月15日 2-8:概率分析与随机算法
  • 理解概率在算法设计中的作用
  • 掌握基于概率的算法分析的基本方法
  • TC第5章
  • CS第5章第6、7节
  • 随机变量在算法分析中的意义
  • CS第5.6节问题4、8
  • CS第5.7节问题1、2、4、6、12、16、18
  • TC第5.2节练习1、2、4
  • TC第5.3节练习1、2、3、4
  • TC第5章问题2
  • 随机排列生成算法
2016年4月21日 2-9:排序与选择
  • 深入理解快速排序算法的设计思想与分析方法
  • 通过排序理解问题复杂度的下限,并探索一些线性排序算法
  • 掌握以中位数为代表的统计算法
  • TC第7、8、9章
  • 如何证明问题复杂度的下限
  • TC第7.1节练习2
  • TC第7.2节练习4
  • TC第7.3节练习2
  • TC第7.4节练习2
  • TC第7章问题4、5
  • TC第8.1节练习3、4
  • TC第8.2节练习4
  • TC第8.3节练习4
  • TC第8.4节练习2
  • TC第8章问题2
  • TC第9.1节练习1
  • TC第9.3节练习5、7
  • 快速排序
2016-04-28 2-10:基本数据结构
  • 掌握堆栈、队列、链表、指针、根树的概念、实现以及在算法设计中的应用
  • TC第10章
  • MA第2,3章
  • 数据结构的算法支撑与实现效率的平衡
  • TC第10.1节练习4、5、6
  • TC第10.2节练习1、2、3、6
  • TC第10.3节练习4、5
  • TC第10.4节练习2、3、4
  • TC第10章问题3
  • 实现根树
2016年5月5日 2-11:堆与堆排序
  • 理解并掌握堆的结构、实现以及算法应用
  • 通过堆的应用与实现理解抽象数据类型的基本概念以及分层抽象的思想
  • TC第6章
  • SB第2章
  • 从数据结构到抽象数据类型的思想发展
  • TC第6.1节练习2、4、7
  • TC第6.2节练习2、5、6
  • TC第6.3节练习3
  • TC第6.4节练习2、4
  • TC第6.5节练习5、7、9
  • 堆排序
2016年5月19日 2-12:Hashing方法
  • 掌握Hashing方法的原理、处理冲突的方法以及分析方法
  • TC第11章
  • CS第5章第5节
  • Hashing方法中的冲突处理
  • CS第5.5节问题8、11、14
  • TC第11.2节练习3、5、6
  • TC第11.3节练习3、4
  • TC第11.4节练习2、3
  • TC第11章问题1、2
  • 用至少两个不同的Hash函数实现hashing,并比较冲突情况
2016年05月26日 2-13:搜索树(1)
  • 掌握利用树结构存储与搜索数据的方法
  • TC第12、13章
  • 树的平衡与搜索效率的关系
  • TC第12.1节练习2、5
  • TC第12.2节练习5、8、9
  • TC第12.3节练习5
  • TC第12章问题1
  • TC第13.1节练习5、6、7
  • TC第13.2节练习2
  • TC第13.3节练习1、5
  • TC第13.4节练习1、2、7
  • 实现红黑树,并比较与简单二分搜索树的执行效率