20172328 2018-2019《Java软件结构与数据基础》第一周学习总结

20172328 2018-2019《Java软件结构与数据结构》第一周学习总结

概述 Generalization

本周学习了软件质量、数据结构以及算法分析的具体内容,主要依托于所用教材的第一章和第二章。

教材学习内容总结 A summary of textbook

  • 第一章:概述
  • 1.1软件质量
  • 软件工程:是一门关于高质量软件开发的技术和理论的学科。
  • 软件工程的目标:解决正确性问题、按时且在预算之内给出解决方案、给出高质量的解决方案、以合情合理的方式完成上面事情。
  • 高质量软件的特征
  • 重要解读:
  • 有关可靠性:可靠的软件很少发生故障,即使发生了故障,也可以将该故障的影响降到最低。

  • 有关可维护性:软件系统必须经过细心设计、编码和文档说明,以便为开发人员、维护人员和用户的工作提供支持。

  • 有关可移植性:Java的源代码被编译成了字节码,这是一种低级语言,他不是任何特定CPU的机器语言。字节码运行在Java虚拟上(JVM)。JVM是一种解释并执行字节码的软件。

  • 有关运行效率:软件必须高效地使用诸如CPU时间存储器之类的资源。

  • 1.2数据结构
  • 数据结构:计算机存储、组织数据的形式。
  • 程序 = 数据结构 + 算法
  • 软件 = 程序 + 软件工程
  • Java工具包提供了强大的数据结构。常见的数据结构有数组(Array)、栈(Stack)、队列(Queue)、链表(Linked list)、树(Tree)、哈希表(Hash)、散列表(Hash Table)等。
  • 栈会颠倒数据集的结构,而队列可以保持数据集的结构。
  • 可用于给数列集排队的常用数据结构有有序列表、堆和散列表。
  • 第二章:算法分析
  • 2.1算法效率分析
  • 算法分析:计算机科学中主要关注软件算法效率的主题。算法分析是计算机科学的基础。
  • 2.2增长函数与大O记法
  • 增长函数:表示与该问题大小相对应的时间或者空间的使用,表示问题(n)大小与我们希望最优化的值之间的关系。该函数表示了该算法的事件复杂度或空间复杂度。
  • 渐进复杂度:称为算法的阶次。如书中示例,第二个洗盘子的算法具有阶次为n^2的时间复杂度,记为O(n^2),这种记法称为O()或者大O记法。算法的阶次是忽略该算法的的增长函数中的常量和其他次要项,只保留主项而得出的
  • 一些增长函数及其渐进复杂度[图片展示]
  • 从而算法的阶次为增长函数提供了一个上界。
  • 2.3增长函数的比较
  • 标注:√10≈3.162277660168379、3√10≈2.1544、log?(10)=lg(10)/lg(2)=1/lg(2)=3.321928,从最后一组数据来看,其实问题的关键不是提速CPU(因为提速处理器后帮助却小的可怜),而是要在算法上简化问题,大大提高程序运行的速度。
  • 增长函数的比较图

  • 2.4时间复杂度分析
  • 2.4.1循环运行的复杂度分析
  • 要分析某个算法的阶次,常常需要去确定某个特定语句和某个语句集运行的次数。要分析循环运行,首先要确定该循环体的阶次n,然后用该循环运行的次数乘以它。记请住,n是表示问题的大小。
  • 就算循环有时会跳过几个数,增长函数变了,但常数不影响渐进复杂度,因此阶次不变。
  • 2.4.2嵌套循环的复杂度分析
  • 分析嵌套循环时,将内存循环和外层循环都要兼顾到,并且用乘法来计算复杂度。
  • 方法调用的复杂度分析:与循环体的复杂度有关。

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

  • 问题:在做老师课上的考试题时,一直觉得有道题运行次数是n(n-1),故复杂度应该表示为O(n(n-1)),但当时在书本实例中都没有看到有这种表示,先做了题,但没有深入了解。
  • 解决:其实这个问题是自己没有认真看书的后果。书本15页下有这样一段话:

    在这种情况下,内层循环索引被初始化为外层循环索引的当前值。外层循环运行了n次,内层循环第一次被执行n次,第二次执行n-1次,等等……但是,记住,我们只对主项感兴趣,而忽视其他常数项或其他任何次要项。如果复杂度是线性的,则不管经过多少个元素,其阶次依旧是O(n),因此,上面的代码的复杂度为O(n^2)。

课后习题作答 Exercise

  • EX 2.1:下列增长函数的阶次是多少?

    • a.10n^2+100n+1000
    • 解答:阶次为:n^2。
    • b.10n^3-7
    • 解答:阶次为:n^3
    • c.2^n+100n^3
    • 解答:阶次为: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)=(n^2)/2,阶次为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);
        }
}
  • 解答:由内循环进行的次数是log?(n-1),外循环需要进行的次数是n,故增长函数为F(n)=n·log?(n-1),又因阶数与增长函数的最高阶项有关,要忽略次项与常数项,所以阶次为n·log2(n)。

结对及互评 Group Estimate

-20172301
-20172304

点评模板:

  • 博客中值得学习的或问题:

    • 20172301:
    • 20172304:

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

莫听穿林打叶声,何妨吟啸且徐行。

学习进度条 Learning List

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

参考资料 Reference

原文地址:https://www.cnblogs.com/LXY462283007/p/9612692.html

时间: 2024-10-16 20:08:50

20172328 2018-2019《Java软件结构与数据基础》第一周学习总结的相关文章

20172305 2018-2019-1 《Java软件结构与数据结构》第一周学习总结

20172305 2018-2019-1 <Java软件结构与数据结构>第一周学习总结 教材学习内容总结 本周内容主要为书第一章和第二章的内容: 第一章 软件质量: 正确性(软件达到特定需求的程度) 可靠性(软件发生故障的频率和危害程度) 健壮性(很好处理错误情况的情况) 可用性(用户在软件中掌握和运行任务的容易程度) 可维护性(软件进行修改的容易程度) 可重用性(软件组件可被其他软件系统开发使用的容易程度) 可移植性(软件组成可用于多种计算机环境中的容易程度) 运行效率(不浪费资源的情况下软

2018-2019-20172321 《Java软件结构与数据结构》第九周学习总结

2018-2019-20172321 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 第15章 图 无向图 图由顶点和边组成. 顶点由名字或标号来表示,如:A.B.C.D: 边由连接的顶点对来表示,如:(A,B),(C,D),表示两顶点之间有一条边. 无向图:与树类似,图也由结点和这些结点之间的连接构成.这些结点是顶点,而结点之间的链接是边.无向图是一种边为无序结点对的图.于是,记做(A,B)的边就意味着A与B之间有一条从两个方向都可以游历的连接.边记作(A,B)和记作(B,A

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

20172306 2018-2019 <Java程序设计与数据结构(下)>第一周学习总结 教材学习内容总结 第一章 概述 (程序=数据结构+算法 软件=程序+软件工程) 1.1 软件质量 软件工程师一门关于高质量软件开发的技术和理论的学科 软件工程的目标:1.解决正确性问题 2.按时且在预算之内给出解决方案 3.给出高质量的解决方案 4.以合情合理的方式完成上面的事情 高质量软件的特征 正确性:我认为是我们所做的都是为了解决一个正确性问题. 可靠性:降低软件的故障程度和概率 健壮性:可以很好地

20172328 2018-2019《Java软件结构与数据结构》第六周学习总结

20172328 2018-2019<Java软件结构与数据结构>第六周学习总结 概述 Generalization 本周学习了第十章:非线性集合与数据结构--树.主要讨论了树的使用和实现,以及考察实现和使用树的实例. 教材学习内容总结 A summary of textbook 树(tree):树是一种非线性结构,其元素被组织成了一个层次结构.下面是树的术语,了解一下吧! 树有一个包含结点(node)和边(edge)的集构成,其中的元素被储存在这些结点中,边则将一个结点和另一个结点连接起来.

20172328 2018-2019《Java软件结构与数据结构》第七周学习总结

20172328 2018-2019<Java软件结构与数据结构>第七周学习总结 概述 Generalization 本周学习了第11章:二叉查找树.在本章中,主要探讨了二叉查找树的概念和各种二叉查找树实现,考察为二叉查找树添加和删除元素的算法以及维护平衡二叉查找树的算法 教材学习内容总结 A summary of textbook 二叉查找树(binary search tree):二叉树定义的扩展,一种带有附加属性的二叉树.附加属性是什么?树中的每个节点,其左孩子都要小于其父节点,而父节点

20172328 2018-2019《Java软件结构与数据结构》第八周学习总结

20172328 2018-2019<Java软件结构与数据结构>第八周学习总结 概述 Generalization 本周学习了二叉树的另一种有序扩展?是什么呢?你猜对了!ヾ(?°?°?)??就是堆.本章将讲解堆的链表实现and数组实现,以及往堆中添加元素或从堆中删除元素的算法:还将介绍对的一些用途,包括基本使用和优先队列. 教材学习内容总结 A summary of textbook 堆(heap)就是具有两个附加属性的一颗二叉树: 第一点:它是一颗完全二叉树 ,即叶子节点都在最后一层靠左侧

20172304 2018-2019《java软件结构与数据结构》 第一章 第二章学习总结

20172304 2018-2019<java软件结构与数据结构> 第一章 第二章学习总结 教材学习内容总结 第一章 概述 1.1软件质量: 高质量软件的几个特征: 正确性:软件在多大程度上满足其特定需求 可靠性:软件故障发生频率和危险程度 健壮性:出错情况下可以得到恰当处理的程度 可用性:用户学习和执行任务的难易程度 可维护性:对软件进行修改的难易程度 可重用性:软件组件可重用于其他软件系统开发的难易程度 可移植性:软件组件可以在多个计算机环境下使用的难易程度 运行效率:在不浪费资源的情况下

“全栈2019”Java第九章:解释第一个程序

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第九章:解释第一个程序 下一章 "全栈2019"Java第十章:关键字 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组". 全栈工程师学习

201871010123-吴丽丽《面向对象程序设计(Java)》第一周学习总结

                                                                        201871010123-吴丽丽<面向对象程序设计(Java)>第一周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业要求在哪里  https://www.cnblogs.com/nwnu-daizh/p/11435127.html 作业要求目标 1.了解课程上课方式及老师教学