遍历

排序之归并排序

六眼飞鱼酱① 提交于 2020-04-03 05:01:16
阐述: 归并排序是将两个有序表合并成新的有序表; 而子序列的划分是递归地将待排序集合折半划分多个子序列,类似一个二叉树, 另外上面的递归操作大多会涉及分治思想,通俗讲就是各个分支上的子序列的有序,为最大的序列的有序埋下基础。 所以需要lgN趟的二路合并(假设集合的规模是N),每趟合并的复杂度是O(N),故其时间复杂度无论是在最好情况下还是在最坏情况下均是O(N*lgN)。 归并排序在划分子序列,二路合并有序集合时并没有改变两个相同元素的相对位置,故而是稳定的。 但是,归并排序需要额外的临时存储空间来暂存归并好的结果,所以空间复杂度是O(N)。 归并排序的关键字是:有序集合的合并;子序列的划分方式(如二路归并是通过递归地折半划分) 效果图: 大家可以看到处理每一趟归并的走位,就像我们遍历二叉树的顺序。 代码(c#): /// <summary> /// 归并排序入口 /// </summary> public static void DoMergeSort_Entrance() { List<int> listNum = new List<int>() { 25, 19, 6, 58, 34, 10, 7, 98, 160, 0 }; DoMergeSort_Sort(listNum, 0, listNum.Count - 1); } /// <summary> /// 归并排序,

设计模式之迭代器模式(Iterator)详解及代码示例

扶醉桌前 提交于 2020-04-01 06:03:03
一、模式的定义与特点   迭代器(Iterator)模式的定义:迭代器模式是一种对象行为型模式,提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。 二、迭代器模式优缺点   其主要优点如下: 访问一个聚合对象的内容而无须暴露它的内部表示。 遍历任务交由迭代器完成,这简化了聚合类。 它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。 增加新的聚合类和迭代器类都很方便,无须修改原有代码。 封装性良好,为遍历不同的聚合结构提供一个统一的接口。   其主要缺点是: 增加了类的个数,这在一定程度上增加了系统的复杂性。 三、迭代器模式的实现   迭代器模式是通过将聚合对象的遍历行为分离出来,抽象成迭代器类来实现的,其目的是在不暴露聚合对象的内部结构的情况下,让外部代码透明地访问聚合的内部数据。现在我们来分析其基本结构与实现方法。   迭代器模式主要包含以下角色。 抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象的接口。 具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。 抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。 具体迭代器(Concretelterator)角色

移动硬盘临时文件太多怎么办,python黑科技帮你解决

自古美人都是妖i 提交于 2020-03-30 15:04:36
前言 文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 作者: 星安果 PS:如果想了解更多关于python的应用,可以私信我,或者点击下方链接自行获取(http://t.cn/A6Zvjdun) 目 标 场 景 用过 Mac OS 的朋友应该都遇到过,日常的文件操作会在同级目录下产生一些特定的临时文件。 平常将文件夹打包成压缩包或拷贝文件夹到移动硬盘内,临时文件会包含在里面,如果是程序源代码,在 Windows 系统下编译有时候还会受到影响。 本篇文章的目的是在移动硬盘插入到电脑的同时,利用 Python 自动化和 Windows 服务 删除掉这些临时文件。 编 写 代 码 首先,我们需要循环检测 PC 的驱动器,判断是否存在 可移动的磁盘。 # 循环遍历,对每一个驱动器进行判断while True: for item in disk_partitions(): if 'removable' in item.opts: driver, opts = item.device, item.opts # 删除临时文件 pass break else: continue # 休眠5s,继续遍历 sleep(5) 如果检测到存在可移动的磁盘,就遍历文件,删除 Mac 临时文件。 def remove_all_file

四,集合框架

无人久伴 提交于 2020-03-30 10:59:11
集合框架 一,概念 1,基本 1,为了实现某一种特定功能而预先设计好的一系列具有继承或实现关系的类与接口, 2,操作时可以直接从高层直接开发而不用考虑底层 3,Java集合框架简称 jcf Java Collection Framework 2,最主要的collection 1,iterator和map与collection是关系型 2,List和set都是继承collection 3,collection 是接口 4,collections 是工具类,用来操作collection 二,List---中文名叫;列表(继承collection接口) 1,特点; 1,线性--以有序的方式存放数据,(放入元素的位置,数组就是线性)有序存放,有下标 2,掌握:ArrayList、LinkedList 1、在用法上两者的API完全相同; 2、调用以后的效果也是一样的。 3,区别:两个类在底层的实现上,ArrayList采用的是数组的方式进行存储; 1,LinkedList采用的是双向链表的方式。 这种区别造成了两个类适用场景的不同: LinkedList适用于做大量的往中间添加和删除数据。 2,ArrayList适用于做大量查询动作或往尾部添加和删除数据; 3,辨析:ArrayList\LinkedList\Vector Vector也是List分支,是ArrayList的兄弟类

10.map

耗尽温柔 提交于 2020-03-30 10:12:53
map Go语言中提供的映射关系容器为 map ,其内部使用 散列表(hash) 实现 。 map是一种无序的基于 key-value 的数据结构,Go语言中的map是引用类型,必须初始化才能使用。 map定义 Go语言中 map 的定义语法如下: map[KeyType]ValueType 其中, KeyType:表示键的类型。 ValueType:表示键对应的值的类型。 map类型的变量默认初始值为nil,需要使用make()函数来分配内存。语法为: make(map[KeyType]ValueType, [cap]) 其中cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量。 map基本使用 map中的数据都是成对出现的,map的基本使用示例代码如下: func main() { scoreMap := make(map[string]int, 8) scoreMap["张三"] = 90 scoreMap["小明"] = 100 fmt.Println(scoreMap) fmt.Println(scoreMap["小明"]) fmt.Printf("type of a:%T\n", scoreMap) } 输出: map[小明:100 张三:90] 100 type of a:map[string]int

第七周作业

笑着哭i 提交于 2020-03-30 03:47:59
20162310林臻 2017-2018-1 《程序设计与数据结构》第7周学习总结 教材学习内容总结 非线性结构树的学习 树是一对多或多对多的形式 一个树只有一个根节点(root),父节点和孩节点的概念是相对的,没有孩节点的节点称为叶节点 树的实现也有两种形式,数组和链表。 树的常见的几种分类:二叉树,平衡二叉树,B 树,B+ 树,哈夫曼树,堆,红黑树 教材学习中的问题和解决过程 问题1:对于树的度,节点的度,树的高度,深度以及节点的层次概念不清、 问题1解决方案: 节点的度分为0,1,2.及表示节点所含的分支个数,上图中3 的度是 2,10 的度是 1。 树的度分为0,1,2即表示一棵树中最大节点的度,即哪个节点的子节点最多,它的度就是树的度,上图中树的度为 2。 树的高度,即从叶子节点开始,自底向上增加。 树的深度与树的高度相反,从根节点向下增加。比如上图中的 6 ,高度是 2 ,深度是 3。 本章重点,二叉树 二叉树的定义:二叉树是有限个节点的集合,这个集合可以是空集,也可以是一个根节点和至多两个子二叉树组成的集合,其中一颗树叫做根的 左子树,另一棵叫做根的右子树。 满二叉树的:一个树每个节点要么有两个节点,要么没有节点,符合这类条件的树称为满二叉树。 定义:如果一棵树的高度为 k,且拥有 2^k-1 个节点,则称之为 满二叉树。 完全二叉树

NodeJS学习笔记(二).js

一个人想着一个人 提交于 2020-03-30 03:23:39
1 Stream(数据流) 当内存中无法一次装下需要处理的数据时,或者一边读取一边处理更加高效时,我们就需要用到 数据流。NodeJS中通过各种 Stream 来提供对数据流的操作。 (1)为数据来源创建一个只读数据流: var rs = fs.createReadStream(src); // 从src读取文件, 返回一个新的可读流对象 rs.on('data', function (chunk) { // 触发'data'事件 rs.pause(); //暂停触发'data'事件 doSomething(chunk, function () { rs.resume(); //恢复触发'data'事件 }); }); rs.on('end', function () { cleanUp(); }); (2)为数据目标创建一个只写数据流: var rs = fs.createReadStream(src); var ws = fs.createWriteStream(dst); rs.on('data', function (chunk) { if (ws.write(chunk) === false) { rs.pause(); } }); rs.on('end', function () { ws.end(); }); ws.on('drain', function () {

JAVA基础——集合类汇总

醉酒当歌 提交于 2020-03-29 20:24:48
一、集合与数组 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。 二、层次关系 如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口 Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。 Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。 Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法: 1.hasNext()是否还有下一个元素。 2.next()返回下一个元素。 3.remove()删除当前元素。 三、几种重要的接口和类简介 1、List(有序、可重复) List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时

2020软件工程作业03

一个人想着一个人 提交于 2020-03-29 16:13:28
这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494 这个作业的目标 c++编写程序实现数独填充 作业正文 如下所示 其他参考文献 www.baidu.com 1.Github地址: https://github.com/hjz563585967/20177708 2.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(小时) 实际耗时(小时) Planning 计划 2 4 Estimate 估计这个任务需要多少时间 48 56 Development 开发 15 20 Analysis 需求分析 (包括学习新技术) 5 5 Design Spec 生成设计文档 3 4 Design Review 设计复审 3 3.5 Coding Standard 代码规范 (为目前的开发制定合适的规范) 2 2 Design 具体设计 10 2 Coding 具体编码 6 6 Code Review 代码复审 3 4 Test 测试(自我测试,修改代码,提交修改 2 3

LeetCode算法题-Find Mode in Binary Search Tree(Java实现)

谁说胖子不能爱 提交于 2020-03-29 03:23:58
这是悦乐书的第 246 次更新,第 259 篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第113题(顺位题号是501)。给定具有重复项的二叉搜索树(BST),找到给定BST中的所有模式(最常出现的元素)。假设BST定义如下: 节点的左子树仅包含键小于或等于节点键的节点。 节点的右子树仅包含键大于或等于节点键的节点。 左右子树也必须是二叉搜索树。 例如: 鉴于BST [1,null,2,2], 1 \ 2 / 2 返回[2]。 注意:如果树有多个模式,您可以按任何顺序返回它们。 跟进:你可以不使用任何额外的空间吗? (假设由于递归而产生的隐式堆栈空间不计算)。 本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。 02 第一种解法 使用一个max变量来表示二叉树中的出现次数最多的节点值,使用HashMap来存储每个节点值及其出现的次数,借助一个递归方法,对二叉树中的节点值进行遍历,每次都将max的值进行更新。在遍历完所有节点后,先将最大值添加进ArrayList中,最后再以整型数组作为结果返回。 private Map<Integer, Integer> map; private int max = 0; public int[] findMode(TreeNode root) {