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. 重载全局new/delete实现内存检测

    下面介绍用重载new/delete运算符的方式来实现一个简单的内存泄露检测工具,基本思想是重载全局new/delete运算符,被检测代码调用new和delete运算符时就会调用重载过的operator ...

  2. 【CSS3】特殊的属性归纳(一)

    CSS3手册地址速查表 -webkit- 最终要用兼容性写法 (一)-webkit-tap-highlight-color    (mobile移动设备私有属性) 案列: 问题:遇到a链接和butto ...

  3. 初学node.js-nodejs连接MongoDB(5)

    一.吧MongoDB的驱动程序添加到Node.js中 Node.js 连接 MongoDB 连接

  4. 小程序canvas中文字设置居中锚点

    小程序中经常会遇到要生成图片的需求,图片一般会加上用户的头像和昵称之类的,头像只需要把腾讯域名添加到request和download列表中,使用wx.getImageInfo()就可以缓存到本地,成功 ...

  5. float浮动的一些基础常识

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. ThinkPHP5.1中数据查询使用field方法数组参数起别名时遇到的问题

    首先数据库基本查询是没有问题的 <?php namespace app\index\controller; use think\Db; class Demo5 { //1.单条查询 public ...

  7. 【PHP开发规范】老生常谈的编码开发规范你懂多少?

    [PHP开发规范]老生常谈的编码开发规范你懂多少? 这几天看了一下阿里技术发布的一套Java开发规范<阿里巴巴Java开发手册>,里面写了阿里内部的Java开发规范标准,写的很好.这套Ja ...

  8. 【Hive一】Hive安装及配置

    Hive安装及配置 下载hive安装包 此处以hive-0.13.1-cdh5.3.6版本的为例,包名为:hive-0.13.1-cdh5.3.6.tar.gz 解压Hive到安装目录 $ tar - ...

  9. C语言学习记录_2019.02.07

    C99开始,可以用变量来定义数组的大小:例如,利用键盘输入的变量来定义数组大小: 赋值号左边的值叫做左值: 关于数组:编译器和运行环境不会检查数组下标是否越界,无论读还是写. 越界数组可能造成的问题提 ...

  10. 用Modelsim SE 直接仿真 Altera(Intel PSG) IP核 需要注意的问题

    如果我们直接用Modelsim SE仿真 Altera IP核,首先会进入Quartus II目录下找到IP核对应的仿真库源文件,然后在Modelsim SE中进行编译,添加到Modelsim SE的 ...