算法与数据结构
文章平均质量分 77
深入讨论常见普通级高级算法与数据结构的原理及编程实现。
耀凯考前突击大师
路漫漫其修远兮,吾将上下而求索。
展开
-
Next Permutation Algorithm,取得全排列中当前排列的下一个排列
Next Permutation算法给定一个整数数组,数组中的每一个元素均为0~9之间的整数,如下算法能够高效取得在该数组按数字从小到大排列的全排列中的下一个排列。给定一个任意整数数字,该算法亦可以用来找到仅使用该整数中的数字重构能够得到的 最小的 比当前数字大的数字。假定输入数组为nums。找出当前数组中的 第一个 满足nums[k] < nums[k + 1]条件的索引k。如果满...原创 2019-03-21 16:59:56 · 435 阅读 · 0 评论 -
深入解析Bellman Ford's Algorithm,高效解决含有负权重图中的最短路径问题
概述Bellman Ford算法可以用来解决加权图中的最短路径问题。其与Dijkstra算法的区别在于Belllman Ford算法的应用范围更广,例如其可以用来处理带有负权重的加权图中的最短路径问题。由于Dijkstra算法本质上是一种贪心算法,因而当图中存在路径权值之和为负的环时,Dijkstra算法会给出错误的结果因为其总是偏向于选择当前情况下的局部最优路径。Bellman Ford算法的...原创 2019-03-18 16:48:39 · 2185 阅读 · 1 评论 -
深入解析Dijkstra's Algorithm —— 高效解决有向图中的单点出发最短路径问题
什么是Dijkstra算法?Dijkstra算法是用来寻找最短路径最著名的算法之一。具体来说,Dijkstra算法主要用来寻找一个边的权值不为负的有向图中的任意一点到其他任意结点(在两点相互联通的情况下)之间的最小路径。如果利用Dijkstra算法找出从一点出发,到图中其他所有点的最短路径,事实上我们就构造出了一个最短路径树(shortest-path tree)。Dijkstra最短路径...原创 2018-04-10 11:14:50 · 5313 阅读 · 0 评论 -
[数据结构]二叉树及其遍历
二叉树Keyword二叉树的概念,特性及二叉树的前序(pre-order traversal),中序(in-order traversal),后序(post-order traversal)遍历以及广度优先遍历(Breadth First Search),深度优先遍历(Depth First Search),二叉树的Morris遍历。二叉树的基本概念二叉树就是每个节点最原创 2016-06-08 20:34:56 · 3719 阅读 · 0 评论 -
二叉搜索树的插入和删除结点操作以及iterator的构造
本文总结了二叉搜索树的插入和删除以及DFS遍历iterator的构造操作并给出了相应的java代码原创 2016-07-23 14:44:55 · 637 阅读 · 0 评论 -
排序和搜索算法总结
搜索及排序算法的总结原创 2016-10-20 10:17:00 · 702 阅读 · 0 评论 -
Quick Select Algorithm 快速选择算法
什么是Quick select?Quick select算法通常用来在未排序的数组中寻找第k小/第k大的元素。其方法类似于Quick sort。Quick select和Quick sort都是由Tony Hoare发明的,因此Quick select算法也被称为是Hoare's selection algorithm。原创 2017-03-31 04:38:32 · 25737 阅读 · 2 评论 -
Trie(字典树)的Java实现
Trie(字典树,单词查找树)的java实现。原创 2017-08-04 13:14:55 · 1866 阅读 · 0 评论 -
水塘抽样 Reservoir sampling
水塘抽样 Reservoir sampling原创 2017-12-20 10:52:20 · 1546 阅读 · 0 评论 -
并查集(Union-Find Algorithm),看这一篇就够了
动态连接(Dynamic connectivity)的问题所谓的动态连接问题是指在一组可能相互连接也可能相互没有连接的对象中,判断给定的两个对象是否联通的一类问题。这类问题可以有如下抽象:有一组构成不相交集合的对象 union: 联通两个对象 find: 返回两个对象之间是否存在一条联通的通路 ˇ 在使用union-find处理动态连接的问题时,我们一般将这一组对象抽象...原创 2017-12-25 07:30:07 · 33312 阅读 · 4 评论 -
树状数组(Binary Indexed Tree),看这一篇就够了
定义根据维基百科的定义: A Fenwick tree or binary indexed tree is a data structure that can efficiently update elements and calculate prefix sums in a table of numbers.也就是说,所谓树状数组,或称Binary Indexed Tree,...原创 2018-03-09 07:17:35 · 53619 阅读 · 6 评论 -
线段树(segment tree),看这一篇就够了
定义线段树(segment tree),顾名思义, 是用来存放给定区间(segment, or interval)内对应信息的一种数据结构。与树状数组(binary indexed tree)相似,线段树也用来处理数组相应的区间查询(range query)和元素更新(update)操作。与树状数组不同的是,线段树不止可以适用于区间求和的查询,也可以进行区间最大值,区间最小值(Range Mi...原创 2018-03-18 13:10:49 · 53679 阅读 · 6 评论 -
深入理解拓扑排序(Topological sort)
什么是拓扑排序?维基百科对于拓扑排序有如下定义: a topological sort or topological ordering of a directed graph is a linear ordering of its vertices such that for every directed edge uv from vertex u to vertex v, u com...原创 2018-03-28 08:31:20 · 2976 阅读 · 0 评论