20172315 2018-2019-1 《程序设计与数据结构》第一周学习总结
20172315 2018-2019-1 《程序设计与数据结构》第一周学习总结
教材学习内容总结
第一章
- 正确性:软件遵守其特定要求的程度。
- 可靠性:软件故障的频率和重要性。
- 健壮性:很好地处理错误情况的程度。
- 可用性:用户可以轻松地在软件中学习和执行任务。
- 可维护性:可以轻松地对软件进行更改。
- 可重用性:在开发其他软件系统时可以轻松地重用软件组件。
- 可移植性:软件组件可以轻松地在多个计算机环境中使用。
- 运行效率:软件在不浪费资源的情况下实现其目的的程度。
- 数据结构
程序=数据结构+算法,软件=程序+软件工程
数据结构:计算机存储、组织数据的方式。
第二章
- 算法效率
算法效率通常用CPU的使用时间表示,算法分析是从效率的角度对算法进行分类 - 增长函数
我们希望最优化的值:时间复杂度-CPU的使用时间,空间复杂度-内存空间,
通常关注的比较多是CPU的使用时间
增长函数表示问题大小(n)与希望优化的值之间的关系。 - 大O记法:常用大O表示法表示时间复杂性,注意它是某一个算法的时间复杂性。
- 时间复杂度的计算规则:加法准则,乘法准则,特例情形
教材学习中的问题和解决过程
- 问题1:不懂书上P6上的散列表(hash table)是什么意思
- 问题1解决方案:查询资料得知:哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。资料
- 问题2:空间复杂度与时间复杂度的区别
- 问题2解决方案:时间复杂度是同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。参考资料
课后习题
- EX2.1 下列增长函数的阶次是多少?
a.10n^2+100n+1000
n的平方
b.10n^3-7
n的立方
c.2n+100n3
2的n次方
d.n^2 ·log(n)
n方乘以log(n) - EX2.4 请确定下面代码段的增长函数和阶次
for(int count = 0 ; count < n ; count++)
for(int count2 = 0 ; count2 < n ; count2 = count2 + 2)
{
System.out.println(count,count2);
}
}
该循环外层循环n次,内层循环n/2次,由乘法准测可得增长函数为:F(n)=(n2)/2,即阶次是O(n2)。
- EX 2.5 请确定下面代码段的增长函数和阶次
for(int count = 0 ; count < n ; count++)
for(int count2 = 1 ; count2 < n ; count2 = count2 * 2)
{
System.out.println(count,count2);
}
}
该循环外层循环n次,内层循环log2 n(2^x = n,x=log2 n),所以增长函数是nlog2n,阶次是O(nlog2n)。
结对及互评
点评过的同学博客和代码
- 本周结对学习情况
- 20172318
- 结对学习内容
- 第一章
- 第二章
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 10/10 |