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

时间:2022-03-20 10:25:16

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

教材学习内容总结

第一章 概述

1.1软件质量

软件质量:分为多个方面:正确性、可靠性、健壮性、可用性、可维护性、可重用性、可移植性、运行效率
20172316 2018-2019-1《程序设计与数据结构》第一周学习总结

1.2数据结构

数据结构:是计算机存储、组织数据的方式。为了适应软件的功能,提高软件质量,要合理地使用不同的数据结构。

第二章 算法分析

2.1算法效率分析

算法分析:是计算机科学的基础。我的理解是:这是把用人脑解决的问题转换为可以让计算机可以“看懂”的算法

2.2增长函数与大O记法

  • 问题大小:问题的大小根据问题的具体情况以及所涉及的变化量而不同表达为n
  • 增长函数:问题大小与我们希望最优化值之间的关系,表示算法的时(空)间复杂度
  • 渐进复杂度:n增加时增长函数的一般性质。又称为算法的阶次,阶次的表示:阶次为n时,记为“O(n)”

2.3增长函数的比较

处理器速度和存储器速度不能弥补算法效率的差异。对于复杂度越低的算法,处理器提速的效果越显著。

2.4时间复杂度分析

  • 循环运行的复杂度分析
    例如:
System.out.print("1 ");
for (int count = 0; count < n; count ++)
{
    System.out.print("+ 1 ");
}
System.out.print("= " + n)

其复杂度为O(n)

  • 嵌套循环的复杂度分析
    将每一层的阶次相乘。两层嵌套都为O(n)时,总体的复杂度为O(n²)
  • 方法调用的复杂度分析
    分析方法与嵌套循环的复杂度分析大体相同,

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

该图表中各项数值的得出过程。
20172316 2018-2019-1《程序设计与数据结构》第一周学习总结

算法A为1 : 1,较容易得出。
算法B为10 : 3.16,数值的关系为:3.16是10的开平方。
算法C为10 : 2.15,数值的关系为:2.15是10的开立方。
算法D为10x : x+3.3,3.3就是log₂10(此处忘记对数的计算法则的相关知识,在网络查找时回忆起来)


练习题

EX2.1

下列增长函数的阶次是多少?
a.10n²+100n+1000

b.10n³-7

c.2^n+100n³
2^n

d.n² ·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);
        }
}

增长函数:t(n) = ½n²(外层循环:n次,内部循环:½n次,相乘)
阶次:n²

EX2.5

for(int count = 0 ; count < n ; count++)
    for(int count2 = 1 ; count2 < n ; count2 = count2 * 2)
        {
            System.out.println(count,count2);
        }
}

增长函数:n = 1 时,t(n) = 0;
n > 1 时,t(n) = n·log₂(n - 1)。(外层:n次,内层:log₂(n - 1)次,相乘)
阶次:n·log₂n


学习进度条

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

结对互评

唐才铭19
王文彬29

参考资料