![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 75
zhouyayong09
这个作者很懒,什么都没留下…
展开
-
递归与分治策略之二分搜索算法
二分搜索算法是运用分治策略的典型例子 二分搜索算法充分利用了元素之间的次序关系(二分搜索的算法是基于有序列)采用分治策略,可在最坏情况下用O(logn)时间完成搜索任务。 二分搜索算法的基本思想是将n个元素分成个数大致相同的两半,去a[n/2]与x作比较。如果x = a[n/2],则找到x,算法终止;如果x a[n/2],则只在数组a的右半部继续搜索。具体算法可描述如下: template原创 2012-11-04 09:05:40 · 2250 阅读 · 0 评论 -
堆和哈希表的实现以及应用(一)
首先我来和大家一起了解一下堆的一些问题。堆是一个非常实用的数据结构,在一些算法的优化和一些高级数据结构上都能用到堆。比如优先队列、hash_map、迪杰斯特拉算法(最短路的优化)等等,所以我们大家学好堆是有必要的,对我们学习高深的一些算法和数据结构非常的有用。 我所知道的堆有已下几种:二叉堆(就是我们平常说的堆)、二项堆、斐波那契堆;其中后者都是前者的优化。今天呢,由于我的水平有限原创 2012-11-06 11:21:59 · 572 阅读 · 0 评论 -
堆和哈希表的实现与应用(二)
堆的应用 对于堆的应用,我最熟悉的例子就是堆排序了(以升序排列为例)。算法思想:建立大根堆,每次取出根结点,与最后一个叶子节点就行交换,然后维持大根堆;依次递归实现堆排序。如下描述: const int HEAP_SIZE = 1000; const int MAXN = 100000; template void Max_Heap(T h[], int p, int heap_siz原创 2012-11-06 15:26:00 · 399 阅读 · 0 评论 -
递归与分治策略之快速排序
我在前面的文章中写道:递归与分治策略之线性选择,在其中提到求在一个序列中第k小元素;它实现的算法思想就是利用快速排序的算法思想,那我们现在就一起探讨一下快速排序。 快速排序算法也是基于分治策略的一个排序算法,当然还有另外一个归并排序,也是基于分治策略的。其算法思想:对于输入的子数组a[p:r],按一下三个步骤进行排序; (1)分解:以a[p]为基准元素将a[p:r],划分成3段a[p,q原创 2012-11-10 18:26:23 · 712 阅读 · 0 评论 -
KMP算法
来源:http://www.matrix67.com/blog/archives/115 KMP算法是用来处理字符串匹配问题的,换一句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'm matrix67",字符串B="matrix",我们就说B是A的子串。 解决这类问题,通常我们的方法是枚举从A串的什么位置起开始与B匹配,然后验转载 2012-11-17 19:30:58 · 225 阅读 · 0 评论 -
程序员面试100题之二叉树(一)
二叉树对我们来说已经不陌生了,这是一个非常常用的数据结构,常见的二叉树的应用:二叉排序树、二叉平衡树、红黑树、二叉堆等等,这些都是关于二叉树的一些数据结构;好了我们废话少说,下面我们一起来了解一些二叉树。 二叉树的一些基本术语和特性 二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。 二叉树原创 2012-11-18 20:35:19 · 560 阅读 · 0 评论