20172314 2018-2019-1《程序设计与数据结构》第一周学习总结
教材学习内容总结
概述
- 软件工程:是一门关于高质量软件开发的技术和理论的学科,用来控制开发过程,实现高质量的软件。
软件工程的目标:正确性、可靠性、健壮性、可用性、可维护性、可重用性、可移植性、运行效率。
对于可靠性和健壮性这两个较难区分的特征我的理解是:可靠性可以看做一个人容易不容易生病,健壮性可以看成一个人生病后恢复的难易程度,是身体强壮康复快还是落下病根罒ω罒- 程序=数据结构+算法 ;软件=程序+软件工程
- 数据结构:数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
常用的数据结构比如栈(先入后出)和队列(先入先出)
算法分析
- 算法分析:是对一个算法需要多少计算时间和存储空间作定量的分析。算法是解题的步骤,可以把算法定义成解一确定类问题的任意一种特殊的方法。算法分析是计算机科学的一个基础,并涉及多种技术和概念。
- 算法效率:算法效率是指算法执行的时间,算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量,通常是CPU的使用时间。
- 增长函数:表示问题(n)大小与我们希望最优化的值之间的关系。该函数表示了该算法的时间复杂度(CPU的使用时间)或空间复杂度(内存空间)。
- 渐进复杂度(随着n增加时增长函数的一般性质)称为算法的阶次。算法的阶次是忽略该算法的增长函数中的常量和其他次要项,只保留主项而得出的。
- 大O记法/O():与问题大小无关、执行时间恒定的增长函数称为具有O(1)的复杂度。
- 具有相同阶次的算法,从运行效率的角度来说都认为是等价的。
- 更快的CPU只能给函数增加常量,增加的值是固定的,而算法分析可以随着函数的变化提高增值,所以不能通过提高处理器速度来替代算法分析。
- 增长函数的比较:
n相对较小时各种增长函数的比较
n很大时,各种增长函数的比较
- 循环运行的时间复杂度分析:循环体的阶次n乘以该循环要运行的次数。
- 例1:时间复杂度为n * O(1) = O(n)
for(int count=0;count<n;count++) {/*复杂度为O(1)的步骤系列*/ }
- 例2:时间复杂度为O(log2(n));进行次数为x,所以2^x=n,x=log2(n),复杂度为O(1),所以为O(log2(n))
count=1 while(count<n) {count *=2/*复杂度为O(1)的步骤系列*// }
- 嵌套循环的复杂度分析
- 例1:内层复杂度为O(n),外层为O(n),故为O(n^2)
for{int count=0;count<n;count++) {for(int count2=0;count2<n;count2++){/*复杂度为O(1)的步骤系列*/} }
- 方法调用的复杂度分析
- 例1:复杂度为printsum方法的复杂度乘以该循环的运行次数,即为O(n)*O(n)=O(n^2)
printsum方法为
for (int count=0 ; count<n; count++) {Printsum(count); }
public void printsum(int count) { int sum =0; for(int i=0; i<count; i++)sum += i; System.out.println(sum); }
- 例2:增长函数为复杂度相加,f(n)=1+n+n^2;得出时间复杂度为O(n^2)
public void sample (int n) {printsum(n); //该方法调用复杂度为O(1)for(int count =0;count<n;count++) //该循环复杂度为O(n)printsum(count);for(int count =0;count<n;count++) //该循环复杂度为O(n^2)for(int count2 =0;count2<n;count2++)System.out.println(count,count2); }
- 例1:复杂度为printsum方法的复杂度乘以该循环的运行次数,即为O(n)*O(n)=O(n^2)
作业解答
EX2.1求阶次
a.10n^2+100n+1000
解:阶次是n^2。式子中渐进复杂度最高的是n^2,它的增长速度最快。
b.10n^3-7
解:增长速度最快的是n^3
c. 2^n+100n^3
解:2^n的增长速度大于n^3,所以阶次是2^n
d. n^2logn
解:由于是相乘,所以为原式n^2logn
EX2.4
for(int count = 0 ; count < n ; count++)for(int count2 = 0 ; count2 < n ; count2 = count2 + 2){System.out.println(count,count2);} }
解:外层循环进行次数为n,内层循环为1/2n,所以增长函数f(n)=n* 1/2n=1/2n^2;阶次为n^2
EX2.5
for(int count = 0 ; count < n ; count++)for(int count2 = 1 ; count2 < n ; count2 = count2 * 2){System.out.println(count,count2);} }
解:外层循环需要进行次数为n,内层循环需要进行次数为为x,则2^x=n,x=log2(n),所以增长函数是f(n)=nlog2(n),而阶数与增长函数的最高阶项有关,要忽略次项与常数项,阶次是nlog2(n).
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
积累 | 0/7359 | 3/17 | 30/330 |
第一周 | 0/0 | 1/1 | 8/8 |
结对及互评
点评模板:
- 博客中值得学习的或问题:
- 20172305谭鑫的博客中课本疑难问题解决的很好,内容全面。
- 20172323王禹涵的博客中课本内容总结详实,感悟深刻。
- 基于评分标准,我给谭鑫的博客打分:7分。得分情况如下:
- 问题加分3分
- 感悟不假大空加1分
- 排版精美的加1分
-正确使用Markdown语法加1分
-模板中的要素齐全加1分
- 基于评分标准,我给王禹涵的博客打分:5分。得分情况如下:
- 排版精美的加1分
- 问题加分1分
- 感悟不假大空加1分
-正确使用Markdown语法加1分
-模板中的要素齐全加1分
感悟
有一段时间没有学习了,假期有点点懈怠,突然学习两章内容,看了很久,感觉还没进入状态比较生疏,有些概念较难分清,新的一学期仍需继续努力,多多联系,对课本的理解要到位,加油吧!
参考
- 数据结构
- 算法分析
转载于:https://www.cnblogs.com/YiYiYi/p/9614547.html
20172314 2018-2019-1《程序设计与数据结构》第一周学习总结相关推荐
- 20162302 《程序设计与数据结构》第一周学习总结
20162302 2017-2018-1 <程序设计与数据结构>第一周学习总结 教材学习内容总结 很多情况下时间和空间不可兼得.在不同的情况下,要么用时间换空间,要么用空间换时间. 引出算 ...
- 20155303 2016-2017-2 《Java程序设计》第一周学习总结
20155303 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 浏览教材,根据自己的理解每章提出一个问题 Chapter1 Java平台概论:MyProgr ...
- 201871010123-吴丽丽《面向对象程序设计(Java)》第一周学习总结
201871010123-吴丽丽<面向对象程序设计 ...
- 《数据结构与面向对象程序设计》第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 程序设计>第一周学习总结 在本周的学习中,学习到了好多也收获了好多,从最基础的安装虚拟机开始,根据老师的博客中的教程一步一步的进行,在这过程中也遇到了好 ...
最新文章
- MySQL数据库的创建
- Net中unsafe编程详解
- 编写html要注意,编写XHTML需要注意的问题以及和HTML的区别
- oracle 如何创建job,oracle创建job
- vb中多个串口通讯_串口服务器的原理及应用!
- 用Python制作小游戏之‘植物大战僵尸’(二)完整代码
- 永久删除计算机文件怎么操作步骤,如何彻底删除掉电脑文件夹
- Linux 执行kettle ktr脚本
- python数据可视化神器,我就服它
- syntax error, expect ')' 数据库报错批量插入
- Markdown常用基本格式
- 阿里linux内核月报201412
- 搜狗收录查询 怎么查搜狗是否收录过网页
- python大数据读取分析_python 大数据读取
- VC++6.0 MSDN下载地址
- linux 定位 踩内存_记录一次用户态踩内存问题
- 30、OAK摄像头使用官方的yolox进行初训练和测试
- 【面试通关篇】13个offer,8家SSP,谈谈我的秋招经验
- 大数据获取方法及常用工具学习
- notepad++怎么解决光标变成下划线的问题?
热门文章
- 使用vue-axios请求geoJson数据报错的问题
- 软件工程实践2017第一次作业
- 在wp中,使用NavigationService.Navigate导航页面出现错误
- 安卓开发环境_我的安卓开发环境
- tensorflow下载
- Ubuntu如何搭建Django与Flup和Nginx环境?
- 5c用计算机怎么打,再一次谈谈%5c暴库的利用 -电脑资料
- c语言编译时检查逻辑错误吗,C语言陷阱与技巧20节,自定义“编译时”assert方法,在代码编译阶段检查“逻辑”错误...
- excel实战应用案例100讲(四)-Excel玩转数据:从分析到可视化
- 人工智能AI实战100讲(一)-机器人语义建图(上)