德仔

工作学习之笔记

排序:
默认
按更新时间
按访问量

[数据结构]树、森林和二叉树的转换

树转换为二叉树(1)加线。在所有兄弟结点之间加一条连线。(2)去线。树中的每个结点,只保留它与第一个孩子结点的连线,删除它与其它孩子结点之间的连线。(3)层次调整。以树的根节点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明。(注意第一个孩子是结点的左孩子,兄弟转换过来的孩子是结点的右孩子) ...

2017-11-15 16:03:55

阅读数:154

评论数:0

[数据结构]线索二叉树

1.引入线索二叉树 二叉树的遍历实质上是对一个非线性结构实现线性化的过程,使每一个节点(除第一个和最后一个外)在这些线性序列中有且仅有一个直接前驱和直接后继。但在二叉链表存储结构中,只能找到一个节点的左、右孩子信息,而不能直接得到节点在任一遍历序列中的前驱和后继信息。这些信息只有在遍历的动...

2017-11-15 14:39:54

阅读数:140

评论数:0

【啊哈!算法】算法11:堆——神奇的优先队列(上)

堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样。        有没有发现这棵二叉树有一个特点,就是所有父结点都比子结点要小(注意:圆圈里面的数是值,圆圈上面的数是这个结点的编号,此规定仅适用于本节)。符合这样特点的完全二叉树我们称为最小堆。反之,如果所有父结点都比子结点要大,这样的完全二叉...

2017-07-06 20:19:44

阅读数:153

评论数:0

【啊哈!算法】算法10:二叉树

二叉树是一种特殊的树。二叉树的特点是每个结点最多有两个儿子,左边的叫做左儿子,右边的叫做右儿子,或者说每个结点最多有两棵子树。更加严格的递归定义是:二叉树要么为空,要么由根结点、左子树和右子树组成,而左子树和右子树分别是一棵二叉树。 下面这棵树就是一棵二叉树。         二叉树的使用范围最广...

2017-07-06 20:18:53

阅读数:137

评论数:0

【啊哈!算法】算法1:最快最简单的排序——桶排序

《啊哈C》出版之后,很多网友希望能够有加深的内容,比如数据结构、算法之类的。今后每周五更新一篇吧。最快最简单的排序——桶排序  在我们生活的这个世界中到处都是被排序过的。站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……总之很多东西...

2017-07-06 20:17:05

阅读数:214

评论数:0

【啊哈!算法】算法7:Dijkstra最短路算法

上周我们介绍了神奇的只有五行的Floyd最短路算法,它可以方便的求得任意两点的最短路径,这称为“多源最短路”。本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径”。例如求下图中的1号顶点到2、3、4、5、6号顶点的最短路径。         与Floyd-Warshall...

2017-07-06 20:15:18

阅读数:137

评论数:0

【啊哈!算法】算法6:只有五行的Floyd最短路算法

暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程。        上图中有4个城市8条公路,公路上的数字表示这条公路的长短。请注意这些公路是单向的。我们现在需要求任意两个城市之间的最短路程,...

2017-07-06 20:14:37

阅读数:169

评论数:0

【啊哈!算法】算法4:解密QQ号——队列

上一节中我们学习了队列,它是一种先进先出的数据结构。还有一种是后进先出的数据结构它叫做栈。栈限定只能在一端进行插入和删除操作。比如说有一个小桶,小桶的直径只能放一个小球,我们现在向小桶内依次放入2号、1号、3号小球。假如你现在需要拿出2号小球,那就必须先将3号小球拿出,再拿出1号小球,最后才能将2...

2017-07-06 20:13:33

阅读数:186

评论数:0

【啊哈!算法】算法3:最常用的排序——快速排序

【啊哈!算法】算法3:最常用的排序——快速排序       上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了O(N2)。假如我们的计算机每秒钟可以运行10亿次,那么对1亿个数进行排序,桶排序则只需要0.1秒...

2017-07-06 20:12:54

阅读数:124

评论数:0

【啊哈!算法】算法2:邻居好说话——冒泡排序

算法2:邻居好说话——冒泡排序    简化版的桶排序不仅仅有上一节所遗留的问题,更要命的是:它非常浪费空间!例如需要排序数的范围是0~2100000000之间,那你则需要申请2100000001个变量,也就是说要写成int a[2100000001]。因为我们需要用2100000001个“桶”来存...

2017-07-06 20:11:56

阅读数:252

评论数:0

【啊哈!算法】算法5开启“树”之旅

我们先来看一个例子。         这是什么?是一个图?不对,确切的说这是一棵树。这哪里像树呢?不要着急我们来变换一下。         是不是很像一棵倒挂的树,也就是说它是根朝上,而叶子朝下的。不像?哈哈,看完下面这幅图你就会觉得像啦。         你可能会问:树和图有什么区别?这个称之为...

2017-07-06 20:07:05

阅读数:126

评论数:0

[数据结构]树及树的遍历

八、树(Tree)树,顾名思义,长得像一棵树,不过通常我们画成一棵倒过来的树,根在上,叶在下。不说那么多了,图一看就懂:当然了,引入了树之后,就不得不引入树的一些概念,这些概念我照样尽量用图,谁会记那么多文字?树这种结构还可以表示成下面这种方式,可见树用来描述包含关系是很不错的,但这种包含关系不得...

2017-07-01 14:10:34

阅读数:223

评论数:0

[数据结构与算法]快速排序

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序...

2016-10-11 14:30:17

阅读数:308

评论数:0

[数据结构与算法]堆排序 Heap Sort

堆的定义  n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。  情形1:ki 2i 且ki 2i+1 (最小化堆或小顶堆)  情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大顶堆)  其中i=1,2,…,n/2向下取整;         ...

2016-10-11 12:23:27

阅读数:340

评论数:0

[数据结构与算法]白话经典算法系列之五 归并排序的实现

来自:http://blog.csdn.net/morewindows/article/details/6678165/归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,...

2016-10-11 08:52:42

阅读数:285

评论数:0

[数据结构与算法]超级详细解读基本排序算法(不看后悔,带排序演示动画)

排序与我们日常生活中息息相关,比如,我们要从电话簿中找到某个联系人首先会按照姓氏排序、买火车票会按照出发时间或者时长排序、买东西会按照销量或者好评度排序、查找文件会按照修改时间排序等等。在计算机程序设计中,排序和查找也是最基本的算法,很多其他的算法都是以排序算法为基础,在一般的数据处理或分析中,通...

2016-10-11 08:19:02

阅读数:1375

评论数:0

[数据结构与算法]常用排序算法的动画效果图

来自:http://yingyingol.iteye.com/blog/13348911 快速排序介绍:  快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他...

2016-10-11 08:14:19

阅读数:334

评论数:0

[数据结构与算法]二叉树查找结点和最大最小值

由于BST的属性,所以查找最大与最小值的代码几乎是微不足道的事情。人们总可以在根节点左子树的最左侧的节点上找到BST内的最小值,另一方面,则会在跟节点有字数的最右侧节点上找到BST内的最大值。 public int FindMin() { Node ...

2016-10-09 14:09:58

阅读数:963

评论数:0

[数据结构与算法]二叉树与二叉树遍历

一、构造二叉树 二叉树查找树由节点组成,所以需要有个Node类,这个类类似于链表实现中用到的Node类。首先一起来看看Node类的代码。 public class Node { public int Data; public No...

2016-10-08 10:56:55

阅读数:243

评论数:0

[数据结构与算法]双向链表

虽然从表内第一个节点到最后一个节点的遍历操作是非常简单的,但是反向遍历链表却不是一件容易的事情。如果为Node类添加一个字段来存储指向前一个节点的连接,那么久会使得这个反向操作过程变得容易许多。当向链表插入节点的时候,为了吧数据复制给新的字段会需要执行更多的操作,但是当腰吧节点从表移除的时候就能看...

2016-09-28 15:44:52

阅读数:354

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭