
算法和数据结构
文章平均质量分 60
hh66__66hh
这个作者很懒,什么都没留下…
展开
-
堆排序——基本概念及基本实现代码
堆排序——基本概念及基本实现代码堆的基本概念(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树,树上每个节点对应数组里的一个元素。除了最底层外,该树是完全充满的,且是从左向右填充的。假设A是表示堆的数组,则A包含两个属性:(1)A.length : 数组的元素个数;(2)A.heap_size : 数组中有多少个元素用来存储堆里的元素。这里,A.heap_size <= A....原创 2018-09-28 11:00:17 · 252 阅读 · 0 评论 -
图——基本的图算法(三)拓扑排序
图——基本的图算法(三)拓扑排序1. 基本概念对于一个有向无环图G = (V, E)来说,其拓扑排序就是G中所有顶点的一种线性排序,这种排序满足如下条件:如果图G中包含边(a, b),即由顶点a指向顶点b的有向边,那么在G的拓扑排序中,顶点a一定处于顶点b前面(因此如果有向图G中包含回路,则不可能排出这样一个线性次序)。2. 算法实现2.1 总体思想对一个有向无环图进行拓扑排序的基本思路...原创 2018-10-24 19:22:00 · 1887 阅读 · 0 评论 -
图——最小生成树
图——最小生成树1. 基本概念在一个连通无向图G=(V, E)中,对于其中的每条边(u,v)∈E,赋予其权重w(u, v),则最小生成树问题就是要在G中找到一个无环子集T...原创 2018-11-01 14:40:48 · 41754 阅读 · 2 评论 -
图——单源最短路径(一)基本概念
图——单源最短路径(一)基本概念1. 最短路径问题给定一个带权重的有向图G=(V, E),假设(u, w)是G中的一条边,则其权重为w(u, w)。假设图中有一条路径 p=<v0,v1,v2,...,vk>p = <v_0, v_1, v_2, ... , v_k>p=<v0,v1,v2,...,vk>,则该路径的权重...原创 2018-11-03 10:39:33 · 1290 阅读 · 0 评论 -
图——单源最短路径(二)Dijkstra算法
图——单源最短路径(二)Dijkstra算法Dijkstra算法解决的是带权重的有向图上单源最短路径问题,该算法要求图中任意一条边的权重必须为非负值。1. Dijkstra算法基本思想对于一个带权重的有向图G=(V,E),若要求其中的一个结点S到图中其余各结点的最短路径,Dijkstra算法的思想是:维护一组结点集合T,从源点S到集合T中的结点的最短路径都已经被找到。算法反复地从V-T中选择...原创 2018-11-03 10:39:53 · 551 阅读 · 0 评论 -
图——单源最短路径(三)加权有向无环图中的最短路径算法
图——单源最短路径(三)加权有向无环图中的最短路径算法在许多应用中的加权有向图都是不包含有向环的,因此对于这些图可以采用一种将拓扑排序和顶点的放松结合起来的算法,该算法与Dijkstra算法之间的区别:(1)比Dijkstra算法更快且更简单的最短路径算法,该算法是;(2)Dijkstra算法要求加权有向图中的边的权重非负,而该算法能够处理负权重的边。1. 算法思想目标对于一个无环加权...原创 2018-11-04 10:20:19 · 2753 阅读 · 0 评论 -
图——多源最短路径
图论——多源最短路径1. 最短路径和矩阵乘法1.1 最短路径的结构 首先,引入一个定理:对于图G=(V, E)的所有结点对最短路径问题,都满足:一条最短路径的所有子路径都是最短路径。 假定用一个n×nn \times nn×n的邻接矩阵WWW来表示输入图,且W=(wij)W=(w_{ij})W=(wij),该矩阵表示的是一个有n个结点的有向图G=(V,E)G=(V, E)G=(V,E...原创 2019-02-27 21:03:29 · 1140 阅读 · 0 评论 -
排序——快速排序
排序——快速排序1. 思想 快速排序主要运用的是分治的思想。例如对一个典型的子数组 A[p...r]A[p ... r ]A[p...r]进行快速排序,主要分成三步:(1)分解 数组 A[p...r]A[p ... r ]A[p...r] 被分成两个(可能为空)子数组 A[p...q−1]A[p ... q-1 ]A[p...q−1] 和 A[q+1...r]A[q+1 ... ...原创 2019-03-05 20:25:17 · 348 阅读 · 0 评论 -
排序——归并排序
排序——归并排序1. 思想 归并排序的思想是:如果要对一个数组进行排序,可以先(递归地)将它分成两半分别排序,然后将结果归并起来。归并算法最吸引人的性质是它能保证将任意长度为N的数组排序所需时间和 NlogNNlogNNlogN 成正比;缺点则是它所需的额外空间和N成正比。2. 原地归并的抽象方法 将两个不同的有序数组归并起来,可以采用原地归并的方法,这样就可以先将前半部分排序,再将后...原创 2019-03-10 09:37:26 · 386 阅读 · 0 评论 -
图——基本的图算法(四)关键路径
图——基本的图算法(四)关键路径1. 基本概念(1)AOV网(Activity On Vertex Network)AOV网是一个表示工程的有向图中,其中的顶点用来表示活动,弧则用来表示活动之间的优先关系。举个简单的例子,假定起床后可以边煮水,边刷牙洗脸,但洗脸要在刷牙后,煮好水,刷好牙洗好脸以后,就可以喝水了,这个活动的AOV图如下(其中的每个顶点都表示一个活动,而顶点之间的弧表示了活动之...原创 2018-10-26 17:34:07 · 33306 阅读 · 3 评论 -
图——基本的图算法(二)图的遍历
图——基本的图算法(二)图的遍历1. 基本概念图的遍历指的是从图中的某个顶点出发访问图中其余的顶点,且每个顶点只被访问一次的这个过程。通常来说,图的遍历次序有两种:深度优先遍历(Depth first Search, DFS)和广度优先遍历(Breadth First Search, BFS)。下面就分别来进行介绍。2. 深度优先遍历2.1 总体思想深度优先遍历,也叫深度优先搜索,其基本...原创 2018-10-23 10:51:23 · 3462 阅读 · 0 评论 -
图——基本的图算法(一)图的存储结构
图——基本的图算法(一)图的存储结构1. 图的表示方法对于图G=(V, E)来说,可以有两种标准的表示方法,这两种方法都可以表示有向图和无向图:(1)邻接矩阵(2)邻接链表...原创 2018-10-19 20:39:25 · 28070 阅读 · 1 评论 -
二叉搜索树(BST)——LeetCode783.Minimum Distance Between BST Nodes
二叉搜索树(BST)——LeetCode783.Minimum Distance Between BST Nodes题目描述Given a Binary Search Tree (BST) with the root node root, return the minimum difference between the values of any two different nodes in...原创 2018-10-11 17:24:36 · 161 阅读 · 0 评论 -
二叉树——重建二叉树
二叉树——重建二叉树例如,某二叉树为:前序遍历为:(4,7,9,2,1,5,6)中序遍历为:(7,9,4,1,2,6,5)后序遍历为:(9,7,1,6,5,2,4)1.前序遍历+中序遍历 => 重建二叉树输入某二叉树的前序遍历和中序遍历的结果,重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。代码#include <iostream>#in...原创 2018-10-04 18:31:54 · 3715 阅读 · 0 评论 -
二叉搜索树(BST)——基本概念及基本实现代码
二叉搜索树——基本概念及基本实现代码原创 2018-10-12 09:28:40 · 9998 阅读 · 2 评论 -
堆排序——LeetCode347.Top K Frequent Elements
堆排序——LeetCode347.Top K Frequent Elements题目Given a non-empty array of integers, return the k most frequent elements.Example 1:Input: nums = [1,1,1,2,2,3], k = 2Output: [1,2]Example 2:Input: num...原创 2018-09-28 11:06:34 · 330 阅读 · 0 评论 -
堆排序——LeetCode451. Sort Characters By Frequency
堆排序——LeetCode451. Sort Characters By Frequency题目Given a string, sort it in decreasing order based on the frequency of characters.Example 1:Input:"tree"Output:"eert"Explanation:'e' appears t...原创 2018-09-28 19:16:29 · 450 阅读 · 0 评论 -
堆排序——LeetCode703.Kth Largest Element in a Stream
堆排序——LeetCode703 Kth Largest Element in a Stream题目Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct elemen...原创 2018-09-29 10:31:45 · 261 阅读 · 0 评论 -
二叉搜索树(BST)——LeetCode#98. Validate Binary Search Tree
二叉搜索树(BST)——LeetCode#98. Validate Binary Search Tree题目Given a binary tree, determine if it is a valid binary search tree (BST).Assume a BST is defined as follows:The left subtree of a node contai...原创 2018-10-14 21:25:09 · 192 阅读 · 0 评论 -
排序——选择排序 + 插入排序
排序——选择排序 + 插入排序1. 选择排序1.1 算法思想 选择排序应该说是最简单的排序算法,它的核心思想是不断地选择剩余元素中最小者。 选择排序的过程是:首先,找到数组中最小的元素,然后将它与数组中的第一个元素交换位置(如果第一个元素是最小的元素,则和自己交换);接着,从剩下的元素中找到最小的元素,将它与数组中的第二个元素交换位置。如此往复,直到将整个数组排序。1.2 代码cl...原创 2019-03-17 19:15:44 · 189 阅读 · 0 评论