算法-第四版
文章平均质量分 97
飞翔的蓝鲸
让自己跑起来
展开
-
《算法4》排序算法总结
最近在学算法,就以排序算法的总结作为第一篇博客选择排序插入排序希尔排序归并排序快速排序三向切分快速排序总结选择排序选择排序的思路很简单 ,不断遍历整个数组,将未排序数组中最小的数放到左边,直到整个数组排序完成。选择排序速度较慢,每次都必须遍历整个数组未排序的部分,所以总的比较次数为 C(N)=N+(N−1)+⋯+1∼N22C(N)=N+(N-1)+\cdots+1 \sim \frac原创 2017-10-04 13:43:25 · 396 阅读 · 1 评论 -
《算法4》深入理解红黑树
红黑树是一种性能非常优秀的数据结构,关键在于它能保证最坏的性能也是对数的,主要是因为它是一种平衡的树,所以也叫平衡查找树。要理解红黑树,最好先看看我的上一篇博客《算法4》符号表以及二叉查找树,了解二叉查找树以及我们为什么需要平衡查找树。2-3查找树二叉查找树中树高会受到输入数据的影响,极端情况下一棵树和一个链表没什么区别,所以我们需要一种树,它的所有叶节点到根节点的距离都是相等的,这种树为平衡树,并原创 2017-10-28 11:52:39 · 7748 阅读 · 13 评论 -
《算法4》优先队列和堆排序
优先队列和堆优先队列支持两种操作:删除最大元素和插入元素。可以用有序或者无序数组完成这个数据结构,但是用二叉堆(以下简称堆)可以更加快速地完成元素的删除和插入。堆的插入和删除元素的最大数量级都是logNlogN堆的定义:堆就是一个每个节点都大于它的子节点的二叉树,也叫最大优先队列。堆的第一个元素可以是最大的或者是最小的,前者称为最大优先队列,后者是最小优先队列,这里我们讨论最大优先队列,对于最小优先原创 2017-10-12 22:14:33 · 501 阅读 · 0 评论 -
《算法4》符号表以及二叉查找树
符号表符号表就是键值对的集合,并且支持put和get操作。现实中符号表的应用非常广泛,所以这里介绍几种键值对的实现,主要是二叉查找树以及之后将要介绍的红黑树。一个值得注意的点就是,符号表里面不允许重复的key,也就是put一个键值对时,会先查找符号表里面是否含有这个key,有的话就更改这个key对应的值,没有的话就新加一个键值对两种简单实现:(1)使用无序链表的顺序查找我们维护一个无序链表,当我们查原创 2017-10-21 21:44:06 · 1421 阅读 · 0 评论 -
《算法4》散列表
散列表也是一种符号表,主要特征是可以将键通过散列函数映射为一个数组索引,然后利用这个数组索引就可以做很多东西。散列函数当我们输入一个对象,不论这是个什么东西,经过散列函数处理之后输出一个0到M-1的范围之内的整数。 对于散列函数有一些要求: 1. 相等的对象(使用equals()函数)的散列值是相同的 2.同样的散列值不同的两个对象不相等 3.在输出范围之内尽量均匀分布但是哈希函数是和原创 2017-10-30 22:53:18 · 769 阅读 · 0 评论 -
《算法4》图&深度优先与广度优先算法
图一系列点以及把它们连起来的边就构成了一幅图,图是现实生活中许多东西的抽象比如地图或者电路图,在数学中也有图论这一分支专门研究图的性质,这一篇以及接下来的几篇都是和图相关的。 上图是一幅图的示例。 这里我们先研究无向图,就是图中的边是没有方向的。还要介绍几个定义: 度数:某一个顶点的度数即为依附于它的边的总数。 路径:由边顺序连接起来的一系列顶点。 环:该路径上的任意一个顶点都可以沿着原创 2017-11-11 23:50:48 · 8400 阅读 · 0 评论 -
《算法4》有向图与DAG与Kosaraju算法
有向图在我的上一篇博客《算法4》图&深度优先与广度优先算法中,我介绍了简单的无向图,以及相关的两大搜索方法:深度优先和广度优先搜索,这里我要介绍新的数据结构:有向图。简单的来说有向图就是连接带方向的图。有向图的例子在现实生活中也很多,比如在一段时间内银行间的现金流动,或者在某些地方的一些道路是单向的啊,那么这些现金流以及单向的道路就要用带方向的边来描述,这时有向图就有了用武之地。一个有向图的例子如下原创 2017-11-17 22:41:00 · 1036 阅读 · 0 评论 -
《算法4》最短路径之Dijkstra与Bellman-Ford算法
基本数据结构在本篇文章中将要记录,在加权有向图中的单源最短路径的两个主要算法,所以首先介绍有向边以及加权有向图这两种关键的数据结构,这里的两种数据结构和《算法4》最小生成树之Prim与Kruskal算法中的边以及加权无向图的数据结构很类似,大致看一下就行。 下面是有向边的数据结构:public class DirectedEdge { private final int v; pr原创 2017-12-03 17:51:20 · 1487 阅读 · 2 评论 -
《算法4》最小生成树之Prim与Kruskal算法
最小生成树贪心算法基本数据结构Prim 算法Kruskal算法总结最小生成树在前面我们了解到了无向图和加权有向图,类似的我们给无向图的每一条边加上权重,就得到了加权无向图,加权无向图在现实中也有许多应用,在这一篇,我们讨论对它的一个重要的处理,就是找出图中(本篇中默认为加权无向图)的最小生成树。最小生成树:图的生成树是它的一棵含有所有顶点的无环连通子图。加权图的最小生成树(MST)是它的原创 2017-11-26 10:52:37 · 832 阅读 · 1 评论