20172324 2018-2019-1 《程序设计与数据结构》第一周学习总结

20172324 2018-2019-1 《程序设计与数据结构》第一周学习总结

教材学习内容总结

概述

  • 软件质量

    • 准确性:软件提供的功能是否正确(用户需要的)
    • 可靠性:产品在规定的条件下,在规定的时间内完成规定功能的能力
    • 健壮(易恢复)性:系统失效后,重新恢复原有的功能和性能的能力
    • 可用性:在指定使用条件下,产品被理解、 学习、使用和吸引用户的能力
    • 可维护性:在规定条件下,规定的时间内,使用规定的工具或方法修复规定功能的能力
    • 可重用性:软件组建可用于其他软件开发的难易程度
    • 可移植性:从一种环境迁移到另一种环境的能力
    • 运行效率:在不浪费资源的情况下软件完成目标的程度
  • 数据结构

    • 数据结构:计算机存储、组织数据的形式。
      程序 = 数据结构 + 算法
      软件 = 程序 + 软件工程

算法分析

  • 效率目标

算法效率常用CPU的使用时间表示

  • 算法分析

算法分析是从效率的角度对算法进行分类

  • 增长函数与大O记法
    • 增长函数是表示问题(n)大小与我们希望最优化的值之间的关系,该函数表示了该算法的时间复杂度或空间复杂度。
    • 大O记法:我们将算法具有阶次为n的时间复杂度,记为O(n)。

不管问题是大是小,运行赋值语句和if语句一次,其复杂度就为 O(1)。

  • 渐进复杂度

渐进复杂度称为算法的阶次

  • 算法的阶次是忽略该算法的增长函数的常量和其他次要项,只保留主项。
  • 增长函数的比较
  • 时间复杂度分析
    1.假设某个循环体复杂度为O(1),那么下面循环的时间复杂度为 O(n)
for(int count = 0;count<n;count++)
{
//*复杂度为O(1)的步骤系列
}

某个循环结构以线性方式循环n次,且该循环的复杂度为O(1),那么循环的时间复杂度为 O(n)
2.如果循环的复杂程度是对数级的

count = 1;
while(count < n)
{
count *=2;
//复杂度为O(1)的步骤系列
}

3.嵌套循环的复杂度分析循环出现嵌套时,循环的复杂度等于内层循环的复杂度乘以外层循环的复杂度

for (int count = 0; count < n; count++)
    for (int count2 = 0; count2 < n; count2++)
    {
        //复杂度为O(1)步骤系列
    }

时间复杂度的计算规则

  1. 加法规则
    T(n,m) = T1(n) + T2(n) = O (max ( f(n), g(m) )
  2. 乘法规则
    T(n,m) = T1(n) * T2(m) = O (f(n) * g(m))
  3. 一个特例(问题规模为常量的时间复杂度)
    在大O表示法里面有一个特例,如果T1(n) = O(c), c是一个与n无关的任意常数,T2(n) = O ( f(n) ) 则有T(n) = T1(n) * T2(n) = O ( c*f(n) ) = O( f(n) )。也就是说,在大O表示法中,任何非0正常数都属于同一数量级,记为O(1)。

教材学习中的问题和解决过程

教材布置习题解答

  • EX2.1 下列增长函数的阶次是多少?
    a.10n2+100n+1000:n2
    b.10n3-7:n2
    c.2n+100n3:n^3
    d.n^2 ·log(n):n^2 ·log(n)
  • EX 2.4:请确定下面代码段的增长函数和阶次
for(int count = 0 ; count < n ; count++)
    for(int count2 = 0 ; count2 < n ; count2 = count2 + 2)
        {
            System.out.println(count,count2);
        }
}

属于嵌套循环,内循环需要的次数:n/2,外循环需要的次数n。故:增长函数为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);
        }
}

属于嵌套循环,内循环需要的次数:log₂(n-1),外循环需要的次数n。故:增长函数为F(n)=n·log₂(n-1),阶次为O(n·log2(n))

其他(感悟、思考等,可选)

参考资料

posted @ 2018-09-09 22:48  amberR  阅读(177)  评论(1编辑  收藏  举报
/*头部导航栏*/ #navigator { font-size:15px; border-bottom: 1px solid #ededed; border-top: 1px solid #ededed; height: 60px;/*导航栏高度,原始50*/ clear: both; margin-top: 25px; } /*导航栏设置,可以自定义导航栏的目录*/ #navList { min-height: 35px; float: left; } #navList li { /*每一个栏目节点*/ float: left; margin: 0 5px 0 0; /*这里原来是0 40px 0 0 */ } #navList a { /*栏目文字的格式*/ display: block; width: 5em; height: 22px; float: left; text-align: center; padding-top: 19px; }