算法与数据结构
文章平均质量分 91
_silverBlack
程序媛 刺密
展开
-
并查集C++实现和优化
转载自下面的链接,做了部分修改:https://www.jianshu.com/p/fc17847b0a31前言并查集(Disjoint-set) 的代码非常简洁,但是功能却很强大。本文将使用C++实现并查集并使用“按秩合并”和”路径压缩“优化并查集。我们先大概了解什么是并查集。什么是并查集(Disjoint-set)对于一个集合S={a1, a2, ..., an-1, an},我们还可以对集合S进一步划分: S1,S2,...,Sm-1,Sm,我们希望能够快速确定S中的两两元素是否转载 2021-04-27 11:37:14 · 439 阅读 · 1 评论 -
二叉搜索树Binary Search Tree的构造、添加元素、删除元素
一、概念简单介绍一下BST的概念,可以将每个BST中的节点看成一个结构体,结构体中包含该节点的左右孩子以及该节点的key值。在BST中,每个节点都比它的左孩子要大(如存在的话)且比它的右孩子要小(若存在的话)。由BST的概念可知,按照中序遍历的方式遍历一棵BST,一定会得到一个递增的有序序列。在含有n个节点的BST中查询某个元素是否存在时,当这棵BST是一棵极度不平衡的二叉树,即每个节...原创 2019-07-10 23:02:13 · 1213 阅读 · 0 评论 -
二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解
前言二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度。这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同时会附上递归实现以及非递归实现的代码。此外,本文还将描述二叉树的层次遍历以及zig-zag型遍历。一、前序遍历1、概念对于一棵二叉树,前序遍历将先遍历根节点,再遍历左子树(如果存在的话)...原创 2019-07-08 16:36:13 · 861 阅读 · 0 评论 -
匈牙利算法&二分图最大匹配
转载自:http://blog.jobbole.com/106084/以及:https://blog.csdn.net/dark_scope/article/details/8880547 二分图的最大匹配、完美匹配和匈牙利算法匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是二部图匹配最常见的算法,该算法的核...转载 2018-04-26 17:44:09 · 489 阅读 · 0 评论 -
详解KMP算法
转载自:KMP算法详解 这篇博客写得很好,特别是next数组的求法以及改进KMP算法中next数组的求法。结合大话数据结构这本书一起来看,可以比较清晰地理解。*******************************************************************************************************************...转载 2018-07-01 16:21:34 · 134 阅读 · 0 评论 -
计数排序
转自:计数排序 计数排序是一种算法复杂度 O(n) 的排序方法,适合于小范围集合的排序。比如100万学生参加高考,我们想对这100万学生的数学成绩(假设分数为0到100)做个排序。我们如何设计一个最高效的排序算法。本文不光给出计数排序算法的传统写法,还将一步步深入讨论算法的优化,直到时间复杂度和空间复杂度最优。先看看计数排序的定义Counting sort (sometimes r...转载 2017-04-08 23:25:10 · 186 阅读 · 0 评论 -
快速排序 && 归并排序
最近重新写了一下快速排序的算法和归并排序的算法,不得不说,坑真多......1、快速排序快速排序的思想是现在数组中选择一个核心元pivot(一般是选择数组开头的元素),然后对数组剩下的部分进行排序,使得小于等于pivot的元素位于前面一部分,大于pivot的位于后面一部分,假定下标p以前的包括p对应的元素小于等于pivot,p之后的不包括p的元素大于pivot,确定p的位置之后,...原创 2017-06-07 21:29:18 · 381 阅读 · 2 评论 -
AVL树图文解析以及实现
本文原理转载自:AVL树图文解析和C实现 代码实现是自己写的~ 概要本章介绍AVL树。和前面介绍"二叉查找树"的流程一样,本章先对AVL树的理论知识进行简单介绍,然后给出C语言的实现。本篇实现的二叉查找树是C语言版的,后面章节再分别给出C++和Java版本的实现。建议:若您对"二叉查找树"不熟悉,建议先学完"二叉查找树"再来学习AVL树。目录1. AVL树的介绍2. AVL树...转载 2018-07-07 15:29:24 · 331 阅读 · 0 评论 -
大小堆详解&C++实现&复杂度分析
大小堆介绍部分转载自:二叉堆之图文解析二叉堆的删除、复杂度分析和代码是自己写的~堆和二叉堆的介绍堆的定义堆(heap),这里所说的堆是数据结构中的堆,而不是内存模型中的堆。堆通常是一个可以被看做一棵树,它满足下列性质:[性质一] 堆中任意节点的值总是不大于(不小于)其子节点的值;[性质二] 堆总是一棵完全树。将任意节点不大于其子节点的堆叫做最小堆或小根堆,而将任意节点不...转载 2018-07-13 21:53:08 · 5053 阅读 · 1 评论 -
堆排序详解
转载自:https://www.cnblogs.com/chengxiao/p/6129630.html原文实现java未转载,本文采用C++实现图解排序算法(三)之堆排序预备知识堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有...转载 2018-07-13 22:11:31 · 516 阅读 · 1 评论