Data Structure and Algorithm
ChuckLin
轮子爱好者与总结狂热分子
展开
-
TimSort
TimSort——优化了的归并排序具体算法:TimSort在经典的归并排序的基础上,增加了以下特点I.规定了分组的最小长度,如果分组长度小于最小长度且不是最后一个分组时,将扩充到最小长度分组II.设立一个待排序列栈,最大的待排序列数量为3,没进入一个序列将触发一次合并III.截取两个分组中需要交换的序列进行交换而不需要交换位置的元素直接放入a中IV.在交换位置过程中,出现连续比较...原创 2019-02-17 17:00:10 · 279 阅读 · 0 评论 -
回溯、递归和剪枝
回溯、递归和剪枝回溯法一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。用回溯算法解决问题的一般步骤:1、 针对所给问题,定义问题的解空间,它至少包含问题的一个(最优)...原创 2019-03-08 21:11:14 · 3027 阅读 · 0 评论 -
图
图图在各类数据结构中是相对比较难的一种,概念复杂,一一总结十分耗时,因此基本概念不会出现在本篇博客文章中,请参考链接:https://yq.aliyun.com/articles/675877#, 这篇文章对图的基本概念介绍得很是详细,推荐看一看,特别是图的存储方式和遍历方法。而本篇文章主要介绍一些关于图的应用算法,后续会不断完善。最小(代价)生成树一个有 n 个结点的连通图的生成树是原...原创 2019-03-08 21:10:58 · 181 阅读 · 0 评论 -
哈希表
哈希表哈希法又称散列法、杂凑法以及关键字地址计算法等,相应的表称为哈希表。基本思想是:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系f,使得p=f(k),f称为哈希函数。创建哈希表时,把关键字为k的元素直接存入地址为f(k)的单元;以后当查找关键字为k的元素时,再利用哈希函数计算出该元素的存储位置p=f(k),从而达到按关键字直接存取元素的目的。当关键字集合很大时,关键字值不...转载 2019-03-08 21:07:05 · 438 阅读 · 0 评论 -
堆
堆堆是线性数据结构,相当于一维数组,有唯一后继。通常是一个可以被看做一棵树的数组对象。性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。建立初始堆(来自https://jingyan.baidu.com/article/5225f26b057d...原创 2019-03-08 21:05:07 · 2270 阅读 · 0 评论 -
树
树基本概念节点深度:对任意节点x,x节点的深度表示为根节点到x节点的路径长度。所以根节点深度为0,第二层节点深度为1,以此类推节点高度:对任意节点x,叶子节点到x节点的路径长度就是节点x的高度树的深度:一棵树中节点的最大深度就是树的深度,也称为高度父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点子节点:一个节点含有的子树的根节点称为该节点的子节点节点的层次:从根节点开始...原创 2019-02-22 17:30:07 · 197 阅读 · 0 评论 -
Insertionsort
经典插入排序具体算法:在数组中向前遍历每个元素,遍历时将这个元素插入到前面的序列中。//代码清单: //in java source code for (int i = left, j = i; i < right; j = ++i) { long ai = a[i + 1]; while (ai < a[j]) { ...原创 2019-02-17 17:02:56 · 1344 阅读 · 1 评论 -
merge sort
归并排序(merge sort)具体算法:I.对原数组进行分组:对数组进行遍历,每检测出一个有序序列则记录一个分组,一般分组都是上升序列,下降序列也会被转换成上升序列II.对两两相邻的分组进行合并,合并后的分组也将被记录III.迭代合并之前合并后的分组直到出现最后的一个有序的大分组,也就是排序的最终结果java.util.DualPivotQuicksort类中的static v...原创 2019-02-17 17:02:45 · 299 阅读 · 0 评论 -
Quicksort
快排算法经典快排算法效率:O(log(n))基本思路:分治思想——选择一个数组中的元素作为轴pivot,小于轴的放左边,大于等于轴的放右边,然后对左右两边进行递归。改进:当出现多个等于轴的元素时将导致交换次数增多,因此需要使用单轴单向三分区——小于轴的放左边,等于轴的放中间,大于轴的放右边,对左右两边进行递归。具体算法:取第一个元素为轴,i指向等于轴元素集合的第一个元素,k...原创 2019-02-17 17:02:09 · 150 阅读 · 0 评论 -
红黑树
红黑树每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。额外要求:性质1. 节点是红色或黑色。性质2. 根节点是黑色。性质3 每个叶节点(NIL节点,空节点)是黑色的。性质4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。注意到性质4导致了路径不能有两个毗...原创 2019-02-17 17:01:38 · 134 阅读 · 0 评论 -
线性表
线性表线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。分类我们说“线性”和“非线性”,只在逻辑层次上讨论,而不考虑存储层次,所以双向链表和循环链表依旧是线性表。在数据结构逻辑层次上细分,线性表可分为一般线性表和受限线性表。一般线性表也就是我们通常所说的“线性表”,可以自由的删除或添加结...转载 2019-03-11 11:13:22 · 393 阅读 · 0 评论