GarfieldEr007的专栏

勤奋治学 深度思考 静心钻研 先苦后甜

红黑树详细分析

1.红黑树简介 红黑树是一种自平衡的二叉查找树,是一种高效的查找树。它是由 Rudolf Bayer 于1978年发明,在当时被称为对称二叉 B 树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为...

2018-12-20 13:05:11

阅读数 35

评论数 0

四叉树空间索引原理及其实现

今天依然在放假中,在此将以前在学校写的四叉树的东西拿出来和大家分享。 四叉树索引的基本思想是将地理空间递归划分为不同层次的树结构。它将已知范围的空间等分成四个相等的子空间,如此递归下去,直至树的层次达到一定深度或者满足某种要求后停止分割。四叉树的结构比较简单,并且当空间数据对象分布比较均匀时,具...

2016-06-15 20:13:28

阅读数 1503

评论数 0

数据结构与算法汇总

1、常见数据结构 线性:数组,链表,队列,堆栈,块状数组(数组+链表),hash表,双端队列,位图(bitmap) 树:堆(大顶堆、小顶堆),trie树(字母树or字典树),后缀树,后缀树组,二叉排序/查找树,B+/B-,AVL树,Treap,红黑树,splay树,线段树,树状数组 图:...

2016-03-28 11:24:10

阅读数 590

评论数 0

数据结构之块状链表

1、 概述 在进行算法设计时,我们常用的两种线性数据结构是数组和链表。它们各有优缺点。数组特点是元素在内存中紧挨着存储,因而优点是定位快(O(1)),缺点是插入删除慢(O(n));而链表则不同,它通过指针将不同位置的元素链接起来,因而优缺点与数组正好相反:定位慢(O(n)),插入删除快(O(...

2016-03-28 11:24:05

阅读数 555

评论数 0

数据结构之Trie树

1、 概述 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。 Trie一词来自retrieve,发音为/tri:/ “tree”,也有人读为/traɪ/ “try”。 Trie树可以利用字符串的公...

2016-03-28 11:24:01

阅读数 531

评论数 0

数据结构之并查集Union-Find Sets

1、  概述 并查集(Disjoint set或者Union-find set)是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。 2、  基本操作 并查集是一种非常简单的数据结构,它主要涉及两个基本操作,分别为: A. 合并两个不相交集合 ...

2016-03-28 11:23:57

阅读数 553

评论数 0

数据结构之树状数组

1、概述 树状数组(binary indexed tree),是一种设计新颖的数组结构,它能够高效地获取数组中连续n个数的和。概括说,树状数组通常用于解决以下问题:数组{a}中的元素可能不断地被修改,怎样才能快速地获取连续几个数的和? 2、树状数组基本操作 传统数组(共n个元素)的元素修...

2016-03-28 11:23:48

阅读数 398

评论数 0

数据结构之伸展树

1、 概述 二叉查找树(Binary Search Tree,也叫二叉排序树,即Binary Sort Tree)能够支持多种动态集合操作,它可以用来表示有序集合、建立索引等,因而在实际应用中,二叉排序树是一种非常重要的数据结构。 从算法复杂度角度考虑,我们知道,作用于二叉查找...

2016-03-27 14:01:31

阅读数 571

评论数 0

数据结构之后缀数组

1. 概述 后缀数组是一种解决字符串问题的有力工具。相比于后缀树,它更易于实现且占用内存更少。在实际应用中,后缀数组经常用于解决字符串有关的复杂问题。 本文大部分内容摘自参考资料[1][2]。 2. 后缀数组 2.1   几个概念 (1)后缀数组SA 是一个一...

2016-03-27 14:00:34

阅读数 470

评论数 0

数据结构之Treap

1. 概述 同splay tree一样,treap也是一个平衡二叉树,不过Treap会记录一个额外的数据,即优先级。Treap在以关键码构成二叉搜索树的同时,还按优先级来满足堆的性质。因而,Treap=tree+heap。这里需要注意的是,Treap并不是二叉堆,二叉堆必须是完全二叉...

2016-03-27 13:59:18

阅读数 566

评论数 0

数据结构之AVL树

1. 概述 AVL树是最早提出的自平衡二叉树,在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis。AVL树种查找、插入和删除在平均和最坏情况下都是O(log n),增加和删...

2016-03-27 13:56:56

阅读数 585

评论数 0

数据结构之位图

1.  概述 位图(bitmap)是一种非常常用的结构,在索引,数据压缩等方面有广泛应用。本文介绍了位图的实现方法及其应用场景。 2. 位图实现 (1)自己实现 在位图中,每个元素为“0”或“1”,表示其对应的元素不存在或者存在。 ...

2016-03-27 13:52:19

阅读数 543

评论数 0

数据结构之红黑树

1. 简介 红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更...

2016-03-27 13:10:05

阅读数 452

评论数 0

数据结构之线段树

1、概述 线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,它基本能保证每个操作的复杂度为O(lgN)。 2、线段树基本操作 线段树的基本操作主要包括构造线段树,区间查询和区间修改。 (1)    线段树构造...

2016-03-23 15:03:49

阅读数 536

评论数 0

数据结构之堆Heap

1. 概述 堆(也叫优先队列),是一棵完全二叉树,它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。 2. 堆的基本操作 堆是一棵完全二叉树,高度为O(lg n),其基本操作至多与树...

2016-03-23 14:59:37

阅读数 610

评论数 0

‘聪明的搜索算法’ A*算法

A*算法     是一种启发式的搜索算法。     了解BFS、DFS或者Dijkstra算法的人应该知道。这些算法都是一种向四周盲目式搜索的方法。   启发式搜索:     启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行...

2016-01-18 15:51:19

阅读数 503

评论数 0

四柱加强版汉诺塔HanoiTower----是甜蜜还是烦恼

我想很多人第一次学习递归的时候,老师或者书本上可能会举汉诺塔的例子。 但是今天,我们讨论的重点不是简单的汉诺塔算法,而是三柱汉诺塔的延伸。先来看看经典的三柱汉诺塔。   一、三柱汉诺塔(Hanoi_Three): 我想大家对于三柱汉诺塔的理解以及算法的实现应该是很熟练了。 ...

2016-01-18 15:48:10

阅读数 3836

评论数 0

David MacKay:用信息论解释 '快速排序'、'堆排序' 本质与差异

这篇文章是David MacKay利用信息论,来对快排、堆排的本质差异导致的性能差异进行的比较。 信息论是非常强大的,它并不只是一个用来分析理论最优决策的工具。 从信息论的角度来分析算法效率是一件很有趣的事,它给我们分析排序算法带来了一种新的思路。 运用了信息论的概念,我们很容易...

2016-01-18 15:46:44

阅读数 612

评论数 0

快排Quick Sort到底有多快?

大师级的文章,总是能够使你更接近于事物的本质。   最近看了pongba的数学之美番外篇:快排为什么那么快。文中提到了Mackay的一篇文章(这里是译文),里面提到了使用信息论来解释快排与堆排的速度差异的本质原因。看罢,内心有种莫名的激动。虽不懂信息论,但Mackay(大师毕竟是大师)...

2016-01-18 15:45:40

阅读数 1017

评论数 0

KMP及其改进算法

本文主要讲述KMP已经KMP的一种改进方法。若发现不正确的地方,欢迎交流指出,谢谢! KMP算法的基本思想: KMP的算法流程: 每当一趟匹配过程中出现字符比较不等时,不需回溯 i 指针,而是利用已经得到的部分匹配的结果将模式向右滑动尽可能远的一段距离后,...

2016-01-18 15:44:17

阅读数 2783

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭