20162310 2017-2018-1 《程序设计与数据结构》第1周学习总结
教材学习内容总结
- 本章从效率的角度来介绍了我们在软件开发中所要注意的地方
- 引入了增大函数和大O符号的概念
- 算法分析师计算机科学的基础课题
- 处理器速度的提升和内存不能弥补算法效率的差异
教材学习中的问题和解决过程
-
问题1:增大函数是什么意思,算法的阶又是什么,两者的区别在哪儿
-
问题1解决方案:根据书中写到:算法的增长函数表示问题的大小与解决方案的时间复杂度之间的精确关系。算法的阶是渐进时间复杂度。两者的关系是:++当问题的大小增长时,算法的复杂度接近渐进复杂度++。
-
问题2:如何才能使用算法的增长函数来确定它的阶??
-
问题2解决方案:根据书中写到:忽略算法增长函数中的常数项和所有非主项,得到算法的阶。
-
困惑:那么如何确定增长函数呢?
-
书中有一个例子,可管中窥豹。
public void sample(int n)
{
printsum(n); // this method call is O(1)
for (int count = 0; count < n; count++) // this loop is O(n)
printsum (count);
for (int count = 0; count < n; count++) // this loop is O(nfang)
{
for (int count = 0; count < n; count++)
System.out.println(count, count2);
}
}
代码调试中的问题和解决过程
-
问题1:在第11章中的解决汉诺塔问题的代码中,TowersOfHanoi类的slove方法还不是很理解
-
问题1解决方案:提取类中的核心方法solve和moveTower
public void solve ()
{
moveTower (totalDisk, 1, 3, 2)
}
private void moveTower (int numDisks, int start, int end, int temp)
{
if (numDisks == 1)//只含有一个盘子的时候执行moveOneDisk方法
moveOneDisk (start, end);
esle//含有多个盘子的时候规定移动的次序
{
moveTower (numDisk-1, start, temp, end);
moveOneDisk (start, end);
moveTower (numDisks-1, temp, end, start);
}
}moveTower是一个递归方法,首次的调用表明要将所有的盘子从柱1
移动带柱3,并用柱2作为备用柱子
代码托管
虚拟机没有用了,IDEA无法跟踪
上周考试错题总结
-
Determine the order of the following pseudocode fragment for i = 1 to n print i next i 这题错的很不应该可能是突然英文题目有些不适应搞错了,答案是O(n)
-
An algorithm of order O(n2 log(n)) is considered faster than algorithm of order O(n!). 这一题想当然认为n!应该不会比n2 log(n)高阶,但是发现错误后仔细一算,发现n!属于O(n2),比另一个高阶
结对及互评
点评模板:
-
博客中值得学习的或问题:
- 王译潇同学的博客是全英文的,十分高大上,值得学习
-
代码中值得学习的或问题:
- 简洁明了
本周结对学习情况
- [20162314](http://www.cnblogs.com/CS162314/p/7496763.html)
- 结对学习内容
- 探究算法分析规律
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 1/1 | 5/10 | |
第二周 | / | / | / | |
第三周 | / | / | / | |
第四周 | / | / | / |