摘要:这次学校数据结构机考,题目很奇怪,简直让我觉得这是算法考试……三道题,撑死了用到树的遍历和并查集,连个队列都没用,也是醉了-.-第一题 高精度加法 两个数相加,数最多5000位,也就是和最多5001位,而且连数的长度都会给。直接两个数组相加就好。第二题 给出树的前序、中序遍历,要求写出树的后...
阅读全文
摘要:单源最短路,复杂度是O(N²),堆优化的是O(NlogN)。基本思想是贪心,每次都加入一个当前最近的点,可以证明每次当时最近的点就是当前最短的路径。因此,所有点都加入之后,起点到所有点的最短路径就都求出来了。 在实现中,需要注意的是,在堆中的某个点i,不只要存当前到i的最短路径长度d[i],还...
阅读全文
摘要:SPFA的全称是Shortest Path Faster Algorithm,一看名称八成就是中国人起的名字,因为外国人起算法名称一般都会写上自己的名字,很少谦虚。实际上,这是西南交通大学段凡丁同学于1994年发表的,是针对Bellman-Ford算法的改进。在此不过多介绍背景,直接介绍SPF...
阅读全文
摘要:今天写写最短路径的Floyd算法(有翻译叫弗洛伊德,不过这奇葩翻译用来读读就好……)。 这个算法的实质,广义来讲,其实是DP(动态规划)。其实按说,算法应该先说说什么贪心、搜索、DP、二分之类的基本算法的,但我觉得太广的东西对没有基础的人来说讲起来不清楚,还是先写写比较典型的一些算法比较好。而...
阅读全文
摘要:快速排序,简称快排,常称QuickSort、QSort。在排序算法中非常常用,其编程复杂度低,时间复杂度O(NlogN),空间复杂度O(N),执行效率稳定,而且常数很低。 基本思想就是二分,例如你要将N个数排序,你调用了QSort(1,N)。那么快排会这样做: 1、找出一个数x 2、将N个数分成两部
阅读全文
摘要:现在大二正在上《数据结构》课,课内的书上代码实现很喜欢无脑用类、变量名字很长,而且常常实现太繁琐,并且代码有些无法运行,这些对于老手无所谓,但初学者看起来却会很不舒服。因此写点自己的代码,大家可以借鉴一下,顺便自己总结一下热热手。 之前已经写了“《数据结构》C++代码”系列,但是由于课内安排了...
阅读全文
摘要:线性表中,先进先出的叫队列,先进后出的叫栈。队列常用于BFS,而在函数递归层数过高时,需要手动实现递归过程,这时候便需要写一个“手动栈”。 有时候,我们会有大量数据频繁出入队列,但同时存在其内的元素却不多,此时需要写“循环队列”。其代码并不难,但里面下标递增的语句值得斟酌一下。k=(k+1)...
阅读全文
摘要:堆,是优先队列最常用的一种实现方式。在优先队列中,每个元素都被赋予了一个优先级,而每次出队时都让优先级最高的元素出队。堆,则是一种存储优先队列的方法,特指以一棵树形式存储的优先队列。最常用的是二叉堆,但既然是专门介绍数据结构,就不妨说全一些,我们取4个典型的堆进行比较,见下表(此表及表下备注,来自...
阅读全文
摘要:这篇博文仅仅是记录一下自己心目中的大牛博客,方便自己浏览,也方便大家有兴趣的来逛逛。也没有什么领域之分,仅仅是作为(曾经)博客的第一篇博文开篇罢了。此文会实时更新的~特别声明,本文排名不分先后,全凭心情-.-||1、http://wjmzbmr.com/陈立杰,相信搞过OI/ACM的人更喜欢叫他CL...
阅读全文
摘要:上一篇“BFS与DFS”写完,突然意识到这个可能偏离了“数据结构”的主题,所以回来介绍一下图的存储:邻接表和邻接矩阵。 存图有两种方式,邻接矩阵严格说就是一个bool型的二维数组,map[i][j]表示i到j有没有单向边,邻接表则是对1~N中每个点都拉出一个链表来,链表E[i]中存的每个点j都表示...
阅读全文
摘要:BFS,广度优先搜索,一层一层去遍历图,故称广度优先。实现方式:队列。 DFS,深度优先搜索,撞墙才回头的遍历,称为深度优先。实现方式:递归(栈)。 这两种遍历方式,是访问图的基本方式。如果拿树做对比的话,BFS对应层次遍历,DFS则对应三种基本遍历方法(先序、中序、后序);遍历树起点只有一个根,...
阅读全文
摘要:散列表,又名哈希表、Hash表。这是一个神奇的数据结构,它的复杂度是常数级别,由于我非常喜欢这个数据结构,在此简单介绍一下。 (没有学过Hash表的同学,我推荐一个教程:http://www.cnblogs.com/jiewei915/archive/2010/08/09/1796042.html...
阅读全文
摘要:线性表,分数组和链表两种(官方名称记得是叫顺序存储和链式存储)。代码里天天用,简单写写。 首先是数组,分静态、动态两种,没什么可说的,注意动态的要手动释放内存就好了。 其次是链表,依旧分静态、动态。课内一般都是讲的是动态实现,但其实还有一种静态实现方法。动态实现剩内存,但是静态实现剩时间,考试的时...
阅读全文
摘要:Splay,伸展树。之所以先写这个课内并不怎么常用的数据结构,是因为本人非常喜欢Splay,我觉得这是非常有美感且灵活的一种平衡树。在此先声明,我的伸展树写法来源于CLJ大牛,基础好的同学可以去他的博客中看看他的Splay实现模板,我的实现仅仅借鉴了CLJ大神的一点实现技巧而已。我的博文《心中的大...
阅读全文
摘要:现在大二正在上《数据结构》课,课内的书上代码实现很喜欢无脑用类、变量名字很长,而且常常实现太繁琐,并且代码有些无法运行,这些对于老手无所谓,但初学者看起来却会很不舒服。因此写点自己实现这些数据结构的代码,大家可以借鉴一下,顺便自己总结一下热热手。 之前已经发了几篇博文,但是由于是第一次写博客...
阅读全文