
算法与数据结构
文章平均质量分 74
Mr_Avin
这个作者很懒,什么都没留下…
展开
-
表、栈和队列
表ADT 形如A1,A2,A3…An的表,这个表的大小为n,而大小为0的表称为空表,非空表中,Ai+1后继Ai,Ai-1前驱Ai,表ADT的相关操有PrintList打印表中的元素;CreateEmpty创建一个空表;Find返回关键字首次出现的位置;Insert和Delete从表的某个位置插入和删除某个关键字。 对表的所有操作都可以通过使用数组来实现,但在这里使用链表的方式来原创 2016-11-29 19:50:23 · 493 阅读 · 0 评论 -
动态规划(二)
动态规划原理和最长公共子序列问题。原创 2017-02-07 12:37:09 · 663 阅读 · 0 评论 -
B树
B树是为磁盘或其他直接存取的辅助设备而设计的一种平衡搜索树,B树类似于红黑树,但它们在降低磁盘I/O操作数方面更好一些,许多数据库系统使用B树或者B树的变种来存储信息。原创 2017-02-17 12:33:41 · 404 阅读 · 0 评论 -
单源最短路径
在最短路径问题中,给定一个带权重的有向图G=(V,E)和权重函数w:E→R,该权重函数将每条边映射到实数值的权重上。图中一条路径p=[v0,v1,•••,vk]的权重w(p)是构成该路径的所有边的权重之和。定义从结点u到结点v的最短路径权重δ=(u,v),从结点u到结点v的最短路径则定义为任何一条权重w(p)= δ=(u,v)的从u到v的路径p。原创 2017-03-01 08:17:02 · 1874 阅读 · 0 评论 -
斐波那契堆
斐波那切堆数据结构有两种用途。第一种,它支持一系列操作,这些操作构成了所谓的“可合并堆”;第二种,斐波那切堆的一些操作可以在常数摊还时间内完成,这使得这种数据结构非常适合于需要频繁调用这些操作的应用。原创 2017-02-20 21:43:58 · 872 阅读 · 0 评论 -
贪心算法
与动态规划算法类似,贪心算法通常用于最优化问题,贪心算法的思想是每步选择都追求局部最优,它在每一步都做出当时看起来最佳的选择,希望这样的选择能导致全局最优解。贪心算法并不保证得到最优解,但对很多问题确实可以求得最优解。贪心方法是一种强有力的算法设计方法,可以很好的解决很多问题。原创 2017-02-12 15:29:55 · 624 阅读 · 0 评论 -
van Emde Boas树
van Emde Boas树支持优先队列操作以及一些其他操作,每个操作最坏运行时间为O(lg lgn),这种数据结构限制关键字必须为0~n-1的整数且无重复。原创 2017-02-21 22:37:57 · 2606 阅读 · 0 评论 -
基本的图算法
图的基本概念和基本的图算法(广度优先搜索和深度优先搜索)。原创 2017-02-22 22:11:42 · 1553 阅读 · 1 评论 -
红黑树的基本插入和删除操作
红黑树是一种二叉搜索树,它在每个结点上增加了一个存储位来表示结点的颜色,可以是RED或者BLACK,通过对任何一条从根到叶子的简单路径上各个结点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出2倍,因而是近似于平衡的。原创 2017-02-02 17:12:46 · 771 阅读 · 0 评论 -
动态规划(一)
动态规划的基本概念,以及在钢条切割问题和矩阵链乘法问题的应用求解。原创 2017-02-06 17:04:23 · 512 阅读 · 0 评论 -
栈和队列的数组实现—《算法导论》学习笔记之六
《算法导论》在介绍了一些排序算法以及关于它们运行的时间分析后,开始介绍一些简单的数据结构,栈,队列,表,有根树···这些是实现高级数据结构以及更多算法设计的基础知识,有一种排序算法是桶排序,可以利用链表的结构在线性时间内完成排序。 栈和队列是经常放在一块比较的两种结构,栈的特性是先进后出(FILO),而队列的特性是先进先出(FIFO)。在现实生活中可以找到很多有这两种特性的例子,笔者在此不作原创 2016-11-26 20:38:47 · 561 阅读 · 0 评论 -
计数排序—《算法导论》学习笔记之五
在之前的学习中,各元素的次序基于输入元素间的比较,这类排序算法称为比较排序。在本书的第八章,介绍了三种以线性时间运行的算法:计数排序、基数排序和桶排序,用非比较的一些操作确定排序顺序。 计数排序(counting sort)的主要思想就是统计数组中每个小于元素x的个数为k,那么x在排序中的位置为k。其伪代码如下:for i : 0 to k C[i] = 0for j = 1 to原创 2016-11-25 07:50:42 · 430 阅读 · 0 评论 -
简易计算器实现混合运算——栈的应用
如果把操作限制于一个表,那么这些操作会执行的很快,然而,令人惊奇的是,这些少量的操作非常强大和重要,这就表明表、栈和队列的应用十分广泛。这里笔者谈谈栈的一个应用,在日后的学习总结中再慢慢将其余的应用展示说明。 栈的应用有很多,例如编译器检查程序的语法错误,但是常常由于缺少一个符号引起编译器列出上百行的诊断,而真正的错误并没有找出,在这种情况下一个有用的工具就是检验是否每件事情都能成对出现的一原创 2016-11-30 21:46:43 · 4341 阅读 · 1 评论 -
日常记录:《算法导论》学习笔记之一
算法作为计算编程中的重要组成部分,其意义显而易见,所以我选择算法和数据结构中的经典书籍《算法导论》作为主要参考书目来深入学习算法和数据结构的内容。原创 2016-11-18 11:19:26 · 672 阅读 · 0 评论 -
日常记录:《算法导论》学习笔记之二
在《算法导论》中还提到了合并算法,该算法采用分治法(divide-and-conquer)的思想。再次以整理扑克牌为例说明,当一堆杂乱无序的牌堆分为有序的两堆,比较两堆牌最上面的一张,按从小到大的方式合并起来,最后得到的一定是有序的,但由一堆无序的牌分为两堆时,所得到的仍旧是杂乱无序的,我们可以依次下去,直到最小的牌堆中只有一张牌时,此时是绝对有序的,然后依次合并,最后得到整理好的牌,这种算法称为原创 2016-11-20 20:40:35 · 476 阅读 · 0 评论 -
日常记录:《算法导论》学习笔记之三—堆排序
堆排序(heapsort)算法的实现。原创 2016-11-21 17:23:33 · 442 阅读 · 0 评论 -
树、二叉树、二叉查找树
利用表数据结构来进行数据操作时,其访问方式是线性的,当数据量较大时,需要的处理时间会很大,不宜使用,这时我们需要一种新的数据结构,来降低时间的开销,这种数据结构就是树(tree)。原创 2016-12-04 10:59:40 · 731 阅读 · 0 评论 -
AVL树及关于插入的说明
基本概念 AVL树是带有平衡条件的二叉查找树,这个平衡条件必须保持:一棵AVL树的每个结点的左子树和右子树的高度最多差1。struct AvlNode{ ElementType Element; AvlNode Left; AvlNode Right; int Height;}; 当进行插入操作时,需要更新通向根节点路径上节点的平衡信息,而且插入一个节点后原创 2016-12-05 15:19:11 · 1635 阅读 · 0 评论 -
日常记录:《算法导论》学习笔记之四—快速排序
《算法导论》第7章讲到了快速排序(quick sort),快速排序通常是用于排序的最佳的实用选择,因为其平均性能比较好。与合并算法相同,快速排序也是基于分治模式的,笔者再次选择整理扑克牌的情形来解释这一排序过程。 合并排序中,是将杂乱的牌堆分为两堆,依次再堆子堆牌分解,而在快速排序中,分出子牌堆加了些条件,我们将牌堆底部的牌作为对照牌,将牌堆中大于或者小于这张对照牌的牌分成左右两堆,然后利用原创 2016-11-23 13:08:21 · 457 阅读 · 0 评论 -
散列表数据结构之一:分离链接法
基本概念 查找树ADT允许对一组元素进行各种操作,而今次总结的散列表(hash table)ADT,不过它只支持二叉查找树所允许的一部分操作,散列表的实现常常叫做散列(hashing),以常数平均时间执行插入、删除和查找的技术。 理想的散列表数据结构只不过是一个包含有关键字的具有固定大小的数组,把表的大小叫做TableSize,并将其理解为散列数据结构的一部分而不仅仅是浮原创 2016-12-07 09:15:38 · 979 阅读 · 0 评论 -
最小生成树
一个无向连通图G=(V,E),对于每条边(u,v) ∈E,赋予其权重w(u,v),希望找到一个无环子集T⊆E,既能够将所有的结点连接起来,又具有最小的权重。由于T是无环的,并且连通所有的结点,因此,T必然是一棵树,这样的树为生成树,因为是由图G所生成的,称求取该生成树的问题为最小生成树问题。 求解最小生成树问题的两种通用算法是Kruskal算法和Prim算法,两种算法都采用贪心算法设计思想原创 2017-02-26 22:47:52 · 1233 阅读 · 0 评论