20162325 2017-2018-2 《程序设计与数据结构》第3周学习总结

教材学习内容概要

查找是在一组项内找到指定目标或是确定目标不存在的过程

高效的查找使得比较的次数最少

Comparable接口允许多态实现算法,而不是只应用于特定的类

二分查找利用了查找池有序的这个特性

二分查找的每次比较都排除了一半的可行候选数据

排序是按某种标准将一列数据项按确定的次序重排的过程

选择排序算法反复地将一个个具体的值放到它最终的有序位置,从而完成一组值的排序

插入排序算法反复地将一个个具体的值插入到表的已有序的子表中,从而完成一组值的排序

冒泡排序算法反复地比较相邻元素,如果必要就交换它们的次序,从而完成一组值的排序

快速排序算法通过划分表,然后再递归地对两个子表进行排序,从而完成一组值的排序

快速排序算法递归地将表平分为两部分,直到每个子表中只含有一个元素,然后将这些子表归并为有序段,从而完成一组值的排序

二分查找有对数阶的复杂度,对于大的查找池来说,这非常有效率

选择排序,插入排序及冒泡排序的平均运行时间复杂度是0(n^2)

快速排序的关键是选择一个好的划分元素

归并排序的最坏运行时间复杂度是(n logn)

比较与分类

线性查找 可以针对任何数组,将数组中的每项依次遍历出来之后,与所要查找项对比。

消耗时间也是不规律的,可能查找项处于数组的第一位,也可能处于数组的最后一位。还有可能数组中完全不存在需要查找的项目。

二分查找 针对有序数组使用。

因为数组已经有序排列,可以通过将数组从中间分割,将中间项与所需查找项对比;然后再根据对比结果,再次向上或者向下,寻找中间项对比,直至完成查找。

而且,对于查找最开始,可以通过与第一项和最末项的对比,确定查找项是否处于此数组中。

穷举法: *线性查找*  直接插入 冒泡排序 简单选择

分治    : *二分查找*  希尔排序 快速排序

定义

(1)选择排序:先扫描整个数组,找最小值,然后与第一位交换。然后再次扫描整个数组,找到次小的值,将这个数和数组第二位交换,如此类推,一直做到整个数组有序

(2)插入排序:每次按顺序从序列中抽取一个数,并将这个数放在序列中正确的位置。

(2)冒泡排序:序列中相邻的两个数进行比较,若为逆序,则进行交换,并重复进行这一系列的操作,最终得到正序的序列。

(3)希尔排序:按照一定的间隔将序列分成若干小组,对这若干小组进行排序。组成新序列,再进行分组、排序,经过若干次后最终得到一个有序的序列

(4)快速排序:选择一个数作为枢轴(一般来说选择第一个为枢轴),然后和其中一个数来比(一般按顺序来)若枢轴大于被比较的那个数,则换位置直到两边分别为均小于枢轴和均大于枢轴。然后分成两边再找枢轴,如此类推直到最后整个序列为一个有序的序列。

(5)归并排序:将每个序列拆开,然后两两组合,将逆序的组进行调换,然后再两两组合、排序,最后得到一个有序的序列

算法复杂度

算法的选择

1.数据规模较小

(1)待排序列基本序的情况下,可以选择直接插入排序;
(2)对稳定性不作要求宜用简单选择排序,对稳定性有要求宜用插入或冒泡

2.数据规模不是很大

(1)完全可以用内存空间,序列杂乱无序,对稳定性没有要求,快速排序,此时要付出log(N)的额外空间。
(2)序列本身可能有序,对稳定性有要求,空间允许下,宜用归并排序

3.数据规模很大

(1)对稳定性有求,则可考虑归并排序。
(2)对稳定性没要求,宜用堆排序

4.序列初始基本有序,宜用直接插入,冒泡

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

  • 问题1:第三趟为什么不拿97和65比较,而是49和55?

  • 问题1解决方案:请教的王老师

  • 问题2:当时看图把最上面一行阴影部分带入理解,百思不得其解。。。

  • 问题2解决方案:课间询问的娄老师,阴影部分只是假想的临时存储空间,实际操作后对排序无影响

代码调试中的问题和解决过程

  • 问题1:win10不支持shell命令,无法从cmd获取代码量
  • 问题1解决方案:参考王老师给的链接顺利解决

代码托管

上周考试错题总结

  • 错题1及原因,理解情况

第二个for循环是并列的,非嵌套。而且选项E(2n)指的是2的n次方。第一个for循环执行n次,第二个执行2的n次方,取更复杂的。

  • 错题2及原因,理解情况

解析如图翻译

  • 错题3及原因,理解情况

特别无语,前一次答题正确,第二次选太快不小心搞反了。。。

本周结对学习情况

-  [20162311] (http://www.cnblogs.com/-zzr-/p/7588330.html)

- 结对学习内容
- 课本13章对代码的理解
- 泛型类-bag
-排序PPT

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

  • 这周虽然上课讲的知识是听懂了,但遇到周五课堂测验还是手足无措,发现自己掌握的还只是冰山一角,老师一变通,加大点难度就没辙了。另外动手能力差,程序设计的思路有,但实现起来困难重重,但也没有别的办法,只能多动手多总结。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 58/58 1/1 10/10
第二周 8/18
第三周 134/192 3/4 12/ 30
  • 计划学习时间:12小时

  • 实际学习时间:12小时

  • 改进情况:这周花在写三篇博客上的时间较长

参考资料

20162325 金立清 S2 W3 C13的更多相关文章

  1. 20162325 金立清 S2 W9 C18

    20162325 2017-2018-2 <程序设计与数据结构>第9周学习总结 教材学习内容概要 堆是一棵完全二叉树,其中每个元素大于等于其所有子结点的值. 向堆中添加一个元素的方法是,首 ...

  2. 20162325 金立清 S2 W7 C16

    20162325 2017-2018-2 <程序设计与数据结构>第7周学习总结 教材学习内容概要 树是非线性结构,其元素组织为一个层次结构 树的度表示树种任意结点的最大子结点数 有m个元素 ...

  3. 20162325 金立清 S2 W5 C14

    20162325 2017-2018-2 <程序设计与数据结构>第5周学习总结 关键内容摘要 集合是收集并组织其他对象的对象 集合中的元素一般由加入集合的次序或元素之间某些固有的关系而组织 ...

  4. 20162325 金立清 S2 W11 C20

    20162325 2017-2018-2 <程序设计与数据结构>第11周学习总结 教材关键概念摘要 在哈希方法中,元素保存在哈希表中,其在表中的位置由哈希函数确定. 两个元素或关键字映射到 ...

  5. 20162325 金立清 S2 W10 C19

    20162325 2017-2018-2 <程序设计与数据结构>第10周学习总结 认识 线性表和树两类数据结构,线性表中的元素是"一对一"的关系,树中的元素是" ...

  6. 20162325 金立清 S2 W6 C15

    20162325 2017-2018-2 <程序设计与数据结构>第6周学习总结 教材学习内容概要 队列是先进先出(FIFO)的集合 队列是保存重复编码k值的一种有效结构 实现模拟时常用队列 ...

  7. 20162325 金立清 S2 W8 C17

    20162325 2017-2018-2 <程序设计与数据结构>第8周学习总结 教材学习内容概要 二叉查找树是一棵二叉树,对于其中的每个结点,左子树上的元素小于父结点的值,而右子树上的元素 ...

  8. 20162325金立清 实验四 Android程序设计 实验报告

    实验四 Android程序设计 实验报告 代码托管地址 码云链接 实验内容 安装使用Android Stuidio Activity测试 UI测试 布局测试 事件处理测试 Android程序设计-1 ...

  9. 2017-2018 第一学期201623班《程序设计与数据结构》-第9&10周作业问题总结

    一.作业内容 第8周作业 http://www.cnblogs.com/rocedu/p/7484252.html#WEEK08 第9周作业 http://www.cnblogs.com/rocedu ...

随机推荐

  1. 404 Note Found 队-Beta1

    目录 组员情况 组员1(组长):胡绪佩 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内最新成果 团 ...

  2. 预编译指令#ifdef #endif

    这个是C中的.意思是说如果你定义了某个东西,则执行一段代码,这段代码是包含在ifdef到endif之间的.比如,你debug一个程序,但是到最后你需要将debug的代码删掉,很多则很麻烦.但是如果你那 ...

  3. 一、Django的简介

    2019-04-09 22:58:22 大家好,我是一名普普通通的运维工程师,不甘平庸,想在工作之余多学习一些编程技能,不仅提升自我,还能应用于公司的运维自动化工作(代码的自动发布等).希望今后在这记 ...

  4. js单图片上传

    <form action="" id="form1"> <input type="file" name="hea ...

  5. JavaWeb基础—EL表达式与JSTL标签库

    EL表达式: EL 全名为Expression Language.EL主要作用 获取数据(访问对象,访问数据,遍历集合等) 执行运算 获取JavaWeb常用对象 调用Java方法(EL函数库) 给出一 ...

  6. C# 获取北京时间 (根据纪元时间(1970/1/1)转换为DateTime)

    根据纪元时间(1970/1/1)转换为DateTime WebClient wc = new WebClient(); s= wc.DownloadString("http://api.ti ...

  7. Android开发——布局性能优化的一些技巧(一)

    0. 前言 上一篇我们分析了为什么LinearLayout会比RelativeLayout性能更高,意义在于分析了这两种布局的实现源码,算是对一个小结论的证明过程,但是对布局性能的优化效果,对这两种布 ...

  8. 26-[Boostrap]-全局css样式,组件,控件

    1.全局CSS样式 https://v3.bootcss.com/css/ <!DOCTYPE html> <html lang="zh-CN"> < ...

  9. let和var定义变量的区别

    使用 let 语句声明一个变量,该变量的范围限于声明它的块中.  可以在声明变量时为变量赋值,也可以稍后在脚本中给变量赋值. 使用 let 声明的变量,在声明前无法使用,否则将会导致错误. 如果未在  ...

  10. android targetSdkVersion>=26收不到广播的处理

    背景:GP新政策,要求Google Player上架应用的targetSdkVersion>=26. 一. 为啥GP要求targetSdkVersion>=26? 1 targetSdkV ...