![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Data structure
文章平均质量分 76
Donald-Hu
程序猿~
展开
-
The Most Important Algorithms
原文转载:http://www.risc.jku.at/people/ckoutsch/stuff/e_algorithms.htmlAfter a long discussion with some of my RISC colleagues about what the 5 most important algorithms on the world are, we couldn't re转载 2016-08-02 09:48:31 · 322 阅读 · 0 评论 -
浅析数据结构与算法3--合并排序
合并排序,顾名思义,就是通过将两个有序的序列合并为一个大的有序的序列的方式来实现排序。合并排序是一种典型的分治算法:首先将序列分为两部分,然后对每一部分进行循环递归的排序,然后逐个将结果进行合并。 合并排序最大的优点是它的时间复杂度为O(nlgn),这个是我们之前的选择排序和插入排序所达不到的。他还是一种稳定性排序,也就是相等的元素在序列中的相对位置在排序前后不会发生变化。他的唯一原创 2016-08-07 16:53:20 · 426 阅读 · 0 评论 -
浅析数据结构与算法2--基本排序算法
本篇开始学习排序算法。排序与我们日常生活中息息相关,比如,我们要从电话簿中找到某个联系人首先会按照姓氏排序、买火车票会按照出发时间或者时长排序、买东西会按照销量或者好评度排序、查找文件会按照修改时间排序等等。在计算机程序设计中,排序和查找也是最基本的算法,很多其他的算法都是以排序算法为基础,在一般的数据处理或分析中,通常第一步就是进行排序,比如说二分查找,首先要对数据进行排序。在Donald原创 2016-08-07 16:52:05 · 334 阅读 · 0 评论 -
浅析数据结构与算法1--栈和队列
1. 基本概念概念很简单,栈 (Stack)是一种后进先出(last in first off,LIFO)的数据结构,而队列(Queue)则是一种先进先出 (fisrt in first out,FIFO)的结构,如下图:2. 实现现在来看如何实现以上的两个数据结构。在动手之前,Framework Design Guidelines这本书告诉我们,在设计API或原创 2016-08-07 16:47:50 · 907 阅读 · 0 评论 -
浅析数据结构与算法10--平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树。2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key。维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树。与自平衡二原创 2016-08-07 16:41:22 · 419 阅读 · 0 评论 -
浅析数据结构与算法9--平衡查找树之红黑二叉查找树
前面一篇文章介绍了2-3查找树,可以看到,2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgN,从而保证了最坏情况下的时间复杂度。但是2-3树实现起来比较复杂,本文介绍一种简单实现2-3树的数据结构,即红黑树(Red-Black Tree)定义红黑树的主要是像是对2-3查找树进行编码,尤其是对2-3查找树中的3-node原创 2016-08-07 16:38:47 · 305 阅读 · 0 评论 -
浅析数据结构与算法8--平衡查找树之2-3查找树
前面介绍了二叉查找树(Binary Search Tree),他对于大多数情况下的查找和插入在效率上来说是没有问题的,但是他在最差的情况下效率比较低。本文及后面文章介绍的平衡查找树的数据结构能够保证在最差的情况下也能达到lgN的效率,要实现这一目标我们需要保证树在插入完成之后始终保持平衡状态,这就是平衡查找树(Balanced Search Tree)。在一棵具有N 个节点的树中,我们希望该树原创 2016-08-07 16:34:22 · 666 阅读 · 0 评论 -
浅析数据结构与算法7--二叉查找树 及Java实现
Java实现代码:/** * * 此程序实现一个二叉查找树的功能,可以进行动态插入、删除关键字; * 查询给定关键字、最小关键字、最大关键字;转换为有序列表(用于排序) * */import java.util.ArrayList;import java.util.List;public class BinarySearchTree { // 树的根结点原创 2016-08-07 16:03:03 · 481 阅读 · 0 评论 -
浅析数据结构与算法6--符号表及其基本实现
一、符号表在开始介绍查找算法之前,我们需要定义一个名为符号表(Symbol Table)的抽象数据结构,该数据结构类似我们再C#中使用的Dictionary,他是对具有键值对元素的一种抽象,每一个元素都有一个key和value,我们可以往里面添加key,value键值对,也可以根据key来查找value。在现实的生活中,我们经常会遇到各种需要根据key来查找value的情况,比如DNS根据原创 2016-08-07 16:43:41 · 537 阅读 · 0 评论 -
浅析数据结构与算法4--快速排序
上篇文章介绍了时间复杂度为O(nlgn)的合并排序,本篇文章介绍时间复杂度同样为O(nlgn)但是排序速度比合并排序更快的快速排序(Quick Sort)。快速排序是20世纪科技领域的十大算法之一 ,他由C. A. R. Hoare于1960年提出的一种划分交换排序。快速排序也是一种采用分治法解决问题的一个典型应用。在很多编程语言中,对数组,列表进行的非稳定排序在内部实原创 2016-08-07 16:54:44 · 516 阅读 · 0 评论 -
浅析数据结构与算法5--优先队列与堆排序
在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象。最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话。在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象。这种数据结构就是优先级队列(Priority Queue) 。本文首先介绍优先级队原创 2016-08-07 16:56:18 · 372 阅读 · 0 评论 -
字符串:Rabin-Karp指纹字符串查找算法
暴力字符串匹配(brute force string matching)是子串匹配算法中最基本的一种,它确实有自己的优点,比如它并不需要对文本(text)或模式串(pattern)进行预处理。然而它最大的问题就是运行速度太慢,所以在很多场合下暴力字符串匹配算法并不是那么有用。我们需要一些更快的方法来完成模式匹配的工作,然而在此之前,我们还是回过头来再看一遍暴力法匹配,以便更好地理解其他子串匹配算法原创 2016-08-07 17:55:53 · 3601 阅读 · 3 评论 -
字符串:Boyer-Moore字符串查找算法
1. 简单介绍在用于查找子字符串的算法当中,BM(Boyer-Moore)算法是目前被认为最高效的字符串搜索算法,它由Bob Boyer和J Strother Moore设计于1977年。 一般情况下,比KMP算法快3-5倍。该算法常用于文本编辑器中的搜索匹配功能,比如大家所熟知的GNU grep命令使用的就是该算法,这也是GNU grep比BSD grep快的一个重要原因,具体推荐看原创 2016-08-07 17:37:13 · 1151 阅读 · 6 评论 -
字符串:Knuth-Morris-Pratt子字符串查找算法
之所以叫做KMP,是因为这个算法是由Knuth、Morris、Pratt三个提出来的排序原理:1、我们将字符串A和B比较,在A中查找B字符串,来证明B字符串是否是A的子串。2、上面我们写出了普通的求B是A的字串的算法,你会发现,当B中的j位置的字符和A中i位置的字符不想等的时候,就将我们的j重置为零,在这里就非常浪费了我们查找字符串的效率,而kmp节约的效率主要是在这里。原创 2016-08-07 17:31:31 · 556 阅读 · 2 评论 -
字符串:暴力子字符串查找算法
暴力子字符串查找算法的名字虽然很霸气,但是效率不是很高。是一种简单、粗暴的查找方式。 在最坏的情况下,暴力子字符串查找算法在长度为N的文本中查找长度为M的模式需要~NM次字符比较。核心思想:就是对主串中的每一个字符作为子串的开头,与要匹配的字符串进行匹配。对大串做大循环,每个字符开头做子串的长度的小循环,知道匹配成功或者全部遍历完成为止。 * 暴力字符串查找 *原创 2016-08-07 17:26:18 · 2137 阅读 · 7 评论 -
字符串:单词查找树
一、单词查找树二、三项单词查找树原创 2016-08-07 17:22:38 · 519 阅读 · 3 评论 -
字符串:字符串排序
一、键索引计数法二、低位优先于字符串排序三、高位优先与字符串排序四、三向字符串快速排序五、字符串排序算法的选择原创 2016-08-07 17:21:08 · 1017 阅读 · 0 评论 -
浅析数据结构与算法11--哈希表
在前面的系列文章中,依次介绍了基于无序列表的顺序查找,基于有序数组的二分查找,平衡查找树,以及红黑树,下图是他们在平均以及最差情况下的时间复杂度:可以看到在时间复杂度上,红黑树在平均情况下插入,查找以及删除上都达到了lgN的时间复杂度。那么有没有查找效率更高的数据结构呢,答案就是本文接下来要介绍了散列表,也叫哈希表(Hash Table)什么是哈希表哈希表就原创 2016-08-07 17:00:52 · 533 阅读 · 1 评论 -
浅析数据结构与算法12--无向图相关算法基础
从这篇文章开始介绍图相关的算法,这也是Algorithms在线课程第二部分的第一次课程笔记。图的应用很广泛,也有很多非常有用的算法,当然也有很多待解决的问题,根据性质,图可以分为无向图和有向图。本文先介绍无向图,后文再介绍有向图。之所以要研究图,是因为图在生活中应用比较广泛:无向图图是若干个顶点(Vertices)和边(Edges)相互连接组成的。边仅由两个原创 2016-08-07 16:58:01 · 523 阅读 · 0 评论 -
数据结构原理--试题
选择填空:1.具有n个结点的二叉树采用链接结构存储,链表中存放NULL指针域的个数为(n+1)。2.串是(任意有限个字符构成的序列)3.在一棵二叉树的二叉链表中,空指针域数等于非空指针域数加(2)4.某二叉树的前序和后序序列正好相反,则该二叉树一定是什么二叉树(高度等于其结点数)。5.对于栈操作数据的原则是(后进先出)。6.若长度为n的非空线性表采用顺序存储结构,删除表的第原创 2016-08-12 11:21:54 · 6355 阅读 · 0 评论