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. 50道Java线程面试题(转载)

    1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成 ...

  2. linux文件系统初始化过程(5)---加载initrd(下)

    一.目的 linux把文件分为常规文件.目录文件.软链接文件.硬链接文件.特殊文件(设备文件.管道文件.socket文件等)几种类型,分别对应不同的新建函数sys_open().sys_mkdir() ...

  3. Bootloader的结构和启动过程

    CPU上电后,会在某个地址开始执行,比如MIPS结构的CPU会从0xBFC00000取第一条指令,而ARM结构的CPU则从0x00000000开始,嵌入式开发板中,需要把存储器件ROM或Flash等映 ...

  4. mysql关于视图的用法以及作用

    关于视图的用法以及作用. 作用一: 提高了重用性,就像一个函数.如果要频繁获取user的name和goods的name.就应该使用以下sql语言.示例: select a.name as userna ...

  5. jquery animate() Alternate 语法

    前段时间在使用jQuery的animate() 函数时候用到Alternate方式.主要是要让数字自增到指定大小,且能看见数字增加过程. 一般使用如下方式: function autoPlusAnim ...

  6. day 94 Django学习之django自带的contentType表

    Django学习之django自带的contentType表   通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...

  7. MS datatype define(微软数据类型定义)

    这里根据MS文档整理了微软数据类型的定义, 参考文档:https://docs.microsoft.com/zh-cn/openspecs/windows_protocols/ms-dtyp/2463 ...

  8. 如何使用cubemx 配置freertos,实时查看FreeRTOS任务列表和运行状态

    ---------------------------------------------------------------------------------------------------- ...

  9. LaTeX宏包TikZ绘图示例——Go语言起源图

      本例所绘图形选自<Go语言程序设计>(作者:Alan A. A. Donovan与Brian W. Kernighan)一书的前言部分. 完整代码 \documentclass{art ...

  10. 3530: [Sdoi2014]数数

    3530: [Sdoi2014]数数 链接 分析: 对给定的串建立AC自动机,然后数位dp.数位dp的过程中,记录当前在AC自动机的哪个点上,保证不能走到出现了给定串的点. 代码: #include& ...