文章分类 -  数据结构与算法

摘要:我在讲解heapsort之前,我先讲解了priority queue,重点就在于heap排序使用了priority queue的思想。 前面我们很详细的讲解了priority queue的的流程,我们在进行heapsort的时候就会简单很多。 注意我们sink的过程将会是理解heapsort的重要过 阅读全文
posted @ 2017-11-05 05:27 霄十一郎 阅读(838) 评论(0) 推荐(0)
摘要:这真的是一个包含很多东西的数据结构。我们会逐步解析,来讲解优先队列: 首先知道什么是优先队列: 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除(first in, last out)。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级 阅读全文
posted @ 2017-11-05 03:59 霄十一郎 阅读(2667) 评论(0) 推荐(0)
摘要:我们上一篇文章讲述了快速排序的一些要素,我给出代码中其实考虑了某些优化,我们接下来对快速排序中用到和么用到的优化都进行一定的讲解: 1)就地分割(Partitioning in place) 真的原谅一下我的语文表达能力,其实就是考虑分割过程中需不需要多余数组来辅助的问题。如果我们使用一个多余的数组 阅读全文
posted @ 2017-11-01 22:06 霄十一郎 阅读(294) 评论(0) 推荐(0)
摘要:快速算法同样是非常重要的,用我们教授的话,这是一个里程碑的算法。虽然我也不知道为什么。 我们还是首先来看看快速排序的思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达 阅读全文
posted @ 2017-10-30 00:08 霄十一郎 阅读(684) 评论(0) 推荐(0)
摘要:在《algorithm》中,作者单独讲mergesort作为一个小节,可以看出它的重要程度。 首先来看一下归并排序的运用场景是怎样的:将两个已排序列进行排列。 主要的思想便是:比较a[i]和b[j]的大小,若a[i]≤b[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1; 阅读全文
posted @ 2017-10-28 03:35 霄十一郎 阅读(16247) 评论(1) 推荐(1)
摘要:其实基本排序并不是一个排序方法,而是集中基本的排序方法的定位,我使用这个名字也是因为《algorithm》书中将下面几种排序方法放在一章中,而这一章节的名字成为基本排序(elementary sort)。 书中包括三种排序方法:选择排序(selection sort)、插入排序(insertion 阅读全文
posted @ 2017-10-24 10:18 霄十一郎 阅读(689) 评论(0) 推荐(0)
摘要:接着上一篇文章的内容,这篇我们将阐述hashmap在jdk1.8中的扩容机制。 jdk1.8中对hashmap有着非常棒的扩容机制,我们在上一篇文章提到了当链表长度大于某个值的时候,hashmap中的链表会变成红黑树结构,但是实际上真的是这样么?我们来看一下树化的函数是怎样进行的: 我们从第一个判断 阅读全文
posted @ 2017-10-16 04:30 霄十一郎 阅读(569) 评论(0) 推荐(0)
摘要:HashMap可以说是java中最常见的几种集合了。 在了解HashMap前我们要先了解Object的两个方法:Equals和hashCode() 首先我们来看一下object内的源码是怎样实现的: hashcode(): 但是这个方法没有实现!注意上面这句话: 这里我将jdk源码中所有相关信息都给 阅读全文
posted @ 2017-10-15 23:33 霄十一郎 阅读(9181) 评论(0) 推荐(1)
摘要:上篇文章我们学习了二叉排序树,而二叉排序树的性能取决于二叉树的层数: 最好的情况是 O(logN),存在于完全二叉排序树情况下,其访问性能近似于折半查找; 最差时候会是 O(N),比如插入的元素是有序的,生成的二叉排序树就是一个链表,这种情况下,需要遍历全部元素才行 为了改变二叉树的不足,我们开始使 阅读全文
posted @ 2017-10-09 05:10 霄十一郎 阅读(615) 评论(0) 推荐(0)
摘要:我们知道二分查找可以缩短查找的时间和复杂度,但是二分查找的要求是序列必须是有序的,所以我们引用了二分排序树 二叉排序树,又称二叉查找树、二叉搜索树、B树。 二叉树具有以下独特的性质: 若左子树不空,则左子树上所有的节点的值均小于根节点。 若右子树不空,则右子树上所有的节点的值均小于或等于根节点。 左 阅读全文
posted @ 2017-10-09 01:13 霄十一郎 阅读(948) 评论(1) 推荐(0)
摘要:说句老实话,二叉树应该是一个很简单的数据结构,但是我在实现的时候碰到了极大的问题。最主要的就是对二叉树各项功能的具体定义不明确,导致实现二叉树的方法的时候出现混乱。这里,我自己定义了二叉树插入、删除的方法,当然这些都是可以改变的,插入的规则也是可以根据需求进行更改的。我们学习二叉树最主要的是了解二叉 阅读全文
posted @ 2017-10-08 08:23 霄十一郎 阅读(1093) 评论(0) 推荐(0)
摘要:我们在前面介绍了很多典型的线性结构,如队列,堆栈,数组,她们至多只有一个尾节点。这是非常容易理解的。 下面我们要来介绍一个非线性结构,树(tree): 树不在是一对一的数据结构,而是一对多的非线性连接: 这里有几个规定: 图中的结构就像一棵倒过来的树,最顶部的节点就是“根节点 (root 节点)” 阅读全文
posted @ 2017-10-08 04:10 霄十一郎 阅读(7064) 评论(0) 推荐(0)
摘要:并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在 阅读全文
posted @ 2017-10-03 11:56 霄十一郎 阅读(3407) 评论(1) 推荐(1)
摘要:首先,链表是物理储存单元上非连续,非顺序的储存结构,数据元素是通过链表中的指针(在java中为应用,即Reference)链接次序实现的。链表有一系列结点(链表中每个元素称为结点)组成,每个结点包括储存数据的数据域和只想下一个结点的指针域。 那么为什么教授推荐我们使用链表表示呢,主要在于一下几个原因 阅读全文
posted @ 2017-09-21 22:51 霄十一郎 阅读(669) 评论(0) 推荐(1)
摘要:其实在上一堂课讲到了queue的接口设计。本来想将queue整个包含在上一篇文章中,但是对于队列的问题包含了很多东西,便想单独列出来说明一下。 首先我们先了解什么是队列: 队列同样是一种特殊的线性表,其插入和删除的操作分别在表的两端进行,队列的特点就是先进先出(First In First Out) 阅读全文
posted @ 2017-09-20 06:28 霄十一郎 阅读(381) 评论(0) 推荐(0)
摘要:这周课上讲了基础数据结构:背包(Bags),栈(Stacks)。首先对这两种数据结构有一个基础的认识: 背包:是一种不支持删除元素的集合数据类型,它的目的就是帮助用例收集元素并迭代遍历所有收集到的元素。就像一个袋子里 装弹珠,不过是一次一个。从背包口添加元素,也是从背包口出来,是后进先出。 下压栈( 阅读全文
posted @ 2017-09-18 03:01 霄十一郎 阅读(1559) 评论(0) 推荐(1)