20172304 《程序设计与数据结构》 第一周学习总结
20172304 《程序设计与数据结构》 第一周学习总结
教材学习内容总结
第一章 概述
1.1软件质量:
高质量软件的几个特征:
正确性:软件在多大程度上满足其特定需求
可靠性:软件故障发生频率和危险程度
健壮性:出错情况下可以得到恰当处理的程度
可用性:用户学习和执行任务的难易程度
可维护性:对软件进行修改的难易程度
可重用性:软件组件可重用于其他软件系统开发的难易程度
可移植性:软件组件可以在多个计算机环境下使用的难易程度
运行效率:在不浪费资源的情况下软件完成其目标的程度
1.2数据结构(计算机存储、组织数据的方式)
程序=数据结构+算法
软件=程序+软件工程第二章 算法分析
2.1算法效率分析
算法效率通常用CPU使用时间来表示
算法分析是从效率的角度对算法进行分析
算法分析是计算机科学的基础
2.2增长函数与大O记法
增长函数:表示问题(n)大小与我们希望最优化的值之间的关系该函数表示了该算法的时间复杂度(CPU的使用时间)和空间复杂度(内存空间)
算法的渐进复杂度(随着n增长时增长函数的一般性质)
主要关注函数的主项(即增长速度最快的的那一项)
渐进复杂度称为算法的阶次
增长函数的项之间的比较
盘子的数量 | 15n² | 15n | 15n²+45n |
---|---|---|---|
1 | 15 | 45 | 60 |
2 | 60 | 90 | 150 |
5 | 375 | 225 | 600 |
10 | 1500 | 450 | 1950 |
100 | 150 000 | 4500 | 154500 |
1000 | 15 000 000 | 45000 | 15045000 |
10 000 | 1 500 000 000 000 | 450 000 | 1 5000 450 000 |
100 000 | 150 000 000 000 | 4 500 000 | 150 004 500 000 |
1 000 000 | 15 000 000 000 000 | 15 000 000 | 15 000 045 000 000 |
10 000 000 | 1 500 000 000 000 000 | 450 000 000 | 1 500 000 450 000 000 |
一些增长函数及其渐进复杂度
增长函数 | 阶次 | 标记 |
---|---|---|
t(n)=17 | O(1) | 常量型 |
t(n)=3log n | O(log n) | 对数型 |
t(n)=20n-4 | O(n) | 线性 |
t(n)=12n log n+100n | O(n log n) | n log n |
t(n)=3n²+5n-2 | O(n²) | 平方型 |
t(n)= 8n^3+3n² | O(n^3) | 立方型 |
t(n)=2^n+18n²+3n | O(2^n) | O(2^n) |
如果两个算法完成相同任务具有不同的增长函数,比如都是O(n²),那么从运行效率上来说,两者大体上是相等的。
2.3增长函数的比较
2.4 时间复杂度分析
2.4.1 循环运行的复杂度分析
要确定某个算法的阶次,常常需要确定某个特定语句或某个语句集运行的次数。要确定该循环的阶数n,然后要运行的次数乘以它。
count = 1
while (count <n)
{count *=2
/*复杂度为O(1)的步骤系列*/
}
2.4.2 嵌套循环的复杂度分析
用内层循环的复杂度乘以外层循环的复杂度。例如,下面嵌套循环
for(int count =0; count<n; count++)
{for(int count2 = 0: count2 < n; count2++:){/*复杂度为O(1)的步骤系列*/}
}
其复杂程度为O(n²),内层循环体的复杂度为O(1),并且该内层循环将运行n次。这意味着内层循环的复杂度为O(n).
2.4.3 方法调用的复杂度分析
要确定循环体的阶要先确定调用方法的阶
教材学习中遇到的问题和解决的方法
问题一:为什么java拥有良好的可移植性
1.java作为一种编程语言:源代码可移植性
作为一种编程语言java提供了一种最简单同时也是人们最熟悉的的可移植性--源代码可移植。这就意味着任何一个java程序,不论它运行在何种cpu、操作系统或者java编译器器上都产生一样的结果。这是不是一个新概念,人们使用c或者c++也产生同样的效果,但是使用c或者c++的人们有太多的选择,在许多细节上它都没有严格的定义。这样就导致了同一段程序在不同的环境下会产生不同意外的结果。而java就不同了,由于严密的语义结构,而使编译器不承担这一职责。
2.java作为一个虚拟机:cpu可移植性
大多数编译器产生的目标代码只能运行在一种cpu(如Intel的x86系列),即使那种支持多种编译器的目标代码,也不能产生适合多种cpu的目标代码。 而java不一样,java编译器产生的目标代码针对的是一种并不存在的cpu--java虚拟机,而不是一种具体的cpu。java虚拟机能掩盖不同cpu之间的差别,从而使java-code运行在安装有虚拟机的机器上。
3.java作为一种虚拟的操作系统和图形用户界面:操作系统的可移植。
即使经过重新编译,大多数的用C和C++编写的Windows程序也不能在Unix或Macintosh系统上运行。这是为什么呢?因为程序员在编写Windows程序时使用了大量的WindowsAPI和中断调用,而Windows程序对系统功能的调用与Unix和Macintosh程序有很大的差别,所以除非将全套WindowsAPI移植到其它操作系统上,否则重编译的程序仍不能运行。
JAVA采用了提供一套与平台无关的库函数(包括AWT、UTIL、LANG等等)的方法来解决这个问题。就象JVM提供了一个虚拟的CPU一样,JAVA库函数提供了一个虚拟的GUI环境。
课后习题
练习题
EX2.1 下列增长函数的阶次是多少
a.10n² + 100n + 1000
解答:易知最高次项为10n²故阶次表示为O(n²)
b.10n^3 - 7
解答:易知最高次项为n^3故阶次表示为O(n^3)
c.2^n + 100n^3
解答:易知最高次项为2^n所以阶次表示为O(2^n)
d.n²logn
解答:易知阶次为O(n²logn)
EX2.4
请确定下面代码段的增长函数和阶次
for (int count = 0: count < n: count ++)for (int count = 0;count2 < n; count2 < n: count2 = count2 +2){System.out.println(count, count2);}
}
解答:因为内循环进行的次数是n/2,外循环进行的次数是n,故增长函数f(n)=n²/2,阶次为O(n)= n²。
EX2.5
请确定下面代码段的增长函数和阶次
for (int count = 0: count < n: count ++)for (int count = 1;count2 < n; count2 < n: count2 = count2 * 2){System.out.println(count, count2);}
}
解答:因为内循环进行的次数是log 2 n(以二为底n的对数),外循环进行的次数是n次,故增长函数为f(n)= nlog 2 n,阶次为O(n)= nlog 2 n。
结对互评
20172301 郭恺
博客中的问题和值得学习的地方:
郭恺同学的博客中体现了自己的思考,对很多问题进行了解答。充分体现了其认真的态度以及严谨的学习作风。20172328 李馨雨
博客中的问题和值得学习的地方。李馨雨同学充分的概括了教材的知识,整个界面简洁大方而不散乱,布局井井有条。各个环节设计充分。学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 30/30 | 1/1 | 10/10 |
感悟
新学期又开始了又见到了阔别已久的同学,又有了新的助教,感觉这又会是一个不平凡的新学期,又是一个在未知的道路上探索的过程,又要去体会无知---抓狂----懵懂------抓狂--------懵懂的过程希望在新的学期能更好地提升自己。
参考资料
蓝墨云班课
java软件结构与数据结构
转载于:https://www.cnblogs.com/15248252144dzx/p/9607269.html
20172304 《程序设计与数据结构》 第一周学习总结相关推荐
- 20162302 《程序设计与数据结构》第一周学习总结
20162302 2017-2018-1 <程序设计与数据结构>第一周学习总结 教材学习内容总结 很多情况下时间和空间不可兼得.在不同的情况下,要么用时间换空间,要么用空间换时间. 引出算 ...
- 20155303 2016-2017-2 《Java程序设计》第一周学习总结
20155303 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 浏览教材,根据自己的理解每章提出一个问题 Chapter1 Java平台概论:MyProgr ...
- 《数据结构与面向对象程序设计》第1周学习总结
20182316胡泊 2019-2020-1 <数据结构与面向对象程序设计>第1周学习总结 教材学习内容总结 简单java程序是有哪些部分组成的 Java程序好的排版布局是怎样的 程序开发 ...
- 20175317 《Java程序设计》第一周学习总结
20175317 <Java程序设计>第一周学习总结 教材学习内容总结 本周学习了Java大致的开发步骤,完成了课件自带的习题. 学习了在windows与Linux系统下不同的编译方法,掌 ...
- 20172318 2016-2017-2 《Java程序设计》第一周学习总结
20172318 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 在教材中基本明白了计算机系统的运行方式,了解了对于高级语言是使用是掌握好编程的关键,掌握了一 ...
- 张季跃201771010139《面向对象程序设计(java)》第一周学习总结(改)
张季跃201771010139<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.co ...
- 20155226 2016-2017-2 《Java程序设计》第一周学习总结
20155226 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 第一周主要学习了一二章的内容,也浏览了剩余章节,以下是本周主要学习内容总结 1.首先了解了[ ...
- 张旭升20162329 2006-2007-2 《Java程序设计》第一周学习总结
20162329 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 通过打书上的代码熟悉了Java编程的基本过程 教材学习中的问题和解决过程 1.因为我的虚拟机 ...
- # 2019-2020.3 《java程序设计》第一周学习总结
2019-2020-3 <Java 程序设计>第一周学习总结 在本周的学习中,学习到了好多也收获了好多,从最基础的安装虚拟机开始,根据老师的博客中的教程一步一步的进行,在这过程中也遇到了好 ...
- 20175204 张湲祯 2018-2019-2《Java程序设计》 第一周学习总结
20175204 张湲祯 2018-2019-2<Java程序设计>第一周学习总结 教材学习内容总结 -第一章Java入门要点: -Java的地位:具有面向对象,与平台无关,安全稳定和多线 ...
最新文章
- python映射类型-Python中的映射数据类型 dict
- 黑马程序员-4 String类和StringBuffer类
- Asp.Net Session学习总结
- RocketMQ:消息ACK机制源码解析
- 服务器linux centos 7.4 搭建ftp服务器
- CNN-1: LeNet-5 卷积神经网络模型
- 如何设置坐标原点值_氨气检测仪电化学原理及报警值如何设置
- android 麦克风耳机,Android force AudioRecord使用耳机麦克风
- maven多模块项目部署到服务器,GitHub - baxias/foweb: 一个基于 Spring+SpringMVC+Mybatis 的Maven多模块项目。(实现前后端分离的服务器端)...
- SQL基础E-R图画法(一)
- 简述python_简述Python语言经验总结
- (C语言)验证哥德巴赫猜想,输入一个大于6的偶数,输出这个数能被分解为哪两个质数的和
- WebServer服务器
- iOS 开发经验 - 转载
- thinkphp6 +阿里云短信验证码
- STM32CubeMX学习笔记(42)——ETH接口+LwIP协议栈使用(静态IP)
- ubuntu/linux下打包压缩war、解压war包和jar命令
- 分享一些实用的生活软件
- C语言 输出菱形 最短代码!
- java 有五个学生_《Java程序设计》 创建5个学生对象,给一个学生数组赋值,每个学生属性有:学号,姓名,年龄。...