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. mysql/mariadb学习记录——查询3(AVG、SUM、COUNT)函数

    AVG() 求平均数函数: //求emp表中的sal属性的平均值 mysql> select avg(sal) as salAverage from emp; +-------------+ | ...

  2. SQL用法总全

    https://www.yiibai.com/sql 比较全面 事务就是对数据库执行的工作单元.事务是完成逻辑顺序的工作,无论是在手动方式由用户或者自动地通过某种数据库程序的序列的单元. 事务是一个或 ...

  3. PostgreSQL的HOT(Heap-Only Tuples)

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页 HOT的解释: 如下的日文文档中,有几个图示, ...

  4. maven 打 fatjar

    备忘. 1. <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> < ...

  5. opencv-Getting Started with Videos

    1.opencv库简单操作视频 # coding = utf-8 # Getting Started with Videos import cv2 import numpy as np # 创建捕获视 ...

  6. 洛咕P3250 [HNOI2016]网络 整体二分

    这题太神仙了必须写博客... 显然可以想到二分答案.二分一个答案mid,如果所有长度\(\geq mid\)的路径都过x,那么答案一定\(<mid\),否则答案\(\geq mid\). 那么就 ...

  7. 【JUC源码解析】ForkJoinPool

    简介 ForkJoin 框架,另一种风格的线程池(相比于ThreadPoolExecutor),采用分治算法,工作密取策略,极大地提高了并行性.对于那种大任务分割小任务的场景(分治)尤其有用. 框架图 ...

  8. [webpack]--webpack 如何解析代码模块路径

    前言 webpack是如何解析代码模块路径 webpack 中有一个很关键的模块 enhanced-resolve 就是处理依赖模块路径的解析的,这个模块可以说是 Node.js 那一套模块路径解析的 ...

  9. 手动搭建openstack的痛苦经历

    openstack真的是一个十分痛苦的东西,好在有自动部署工具,虽然有自动部署工具可以方便我们部署使用,但是学习的话,第一次最好手动部署,因为手动部署更能我们了解openstack的工作流程和各组建之 ...

  10. python-flask-ssti(模版注入漏洞)

    SSTI(Server-Side Template Injection) 服务端模板注入 ,就是服务器模板中拼接了恶意用户输入导致各种漏洞.通过模板,Web应用可以把输入转换成特定的HTML文件或者e ...