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.2^n+100n^3
    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)=(n^2)/2,即阶次是O(n^2)。

  • 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)。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 10/10

参考资料

猜你喜欢

转载自www.cnblogs.com/huzhitao/p/9614974.html