算法与数据结构
文章平均质量分 75
慕兰骆驼
爱Linux
展开
-
线性索引查找 - 概念
线性索引查找索引:就是把一个关键字与它对应的i记录相关联的过程,一个索引由若干个索引项构成,每个索引项至少应包含关键字和其对应的记录在存储器中的位置等信息。索引按照结构可以分为:线性索引、树形索引和多级索引。线性索引是将索引项集合组织为线性结构,也称为索引表。包括稠密索引、分块索引、倒排索引。1. 稠密索引一个完美的引子:我母亲年纪大了,记忆力不好,经常原创 2014-04-14 16:34:30 · 5667 阅读 · 0 评论 -
zoj 1003 Crashing Balloon
因式分解题目,用递归来解决。代码如下:// 因式分解相关#include #include #include using namespace std;bool aTrue, bTrue;void dfs(int m, int n, int p) { // m >= n if(aTrue) return; // forget if(m == 1 && n == 1原创 2016-02-23 09:24:46 · 562 阅读 · 0 评论 -
蛇形填数
在n*n的方阵里填入 1, 2, …… n*n, 要求填成蛇形,例如 n=4 时,方阵为:10 11 12 1 9 16 13 28 15 14 37 6 5 4上面的方阵中,空格只是为了便于观察规律,不必严格输出。n分析:掌握要领:下 -> 下 -> 下 -> 左 -> 左 -> 左 -> 上 -> 上 -> 上 -> 右 -> 右原创 2015-10-17 07:34:49 · 526 阅读 · 0 评论 -
分治法 - 归并排序
归并排序是分治法的典型应用,思想如下:divide:divide the array to 2 subarrayconquer:reverse in 2 subarray,if only one elem ,returncombine:merge two ordered subarrayT(n) = 2 T(n / 2) + O (n)O(n)指的是combine所消原创 2015-09-13 10:45:12 · 595 阅读 · 0 评论 -
二叉树的遍历(递归、非递归)
常见二叉树的基本操作:建立树、q原创 2014-07-23 08:21:50 · 949 阅读 · 0 评论 -
次优查找树
/*构造“次优查找树”,使树的带权路径近似达到最小难点在于构造树的过程,怎样来递归寻找根节点,并且逐序形成次优查找树原创 2014-07-23 08:04:52 · 5304 阅读 · 0 评论 -
归并排序
引子:高考分数线的制定,比如一本大学生全国共招生1所谓的全省排名,其实也就是每个市、每个县、每个学校、每个班级的排名合并后再排名得到的。原创 2014-04-22 21:32:58 · 953 阅读 · 2 评论 -
数据结构和算法的基本概念
几个问题:1. 为什么要学习数据结构? 早起人们把计算机理解为数值计算工具,就是感觉计算机当然是用来计算的,所以计算机解决问题,应该先从具体问题中抽象出一个适当的数据模型,设计出一个解此数据模型的算法,然后再编写程序,得到一个实际的软件。 可现实中,我们更多地不是解决数值计算的问题,而是需要一些更科学有效的手段(比如表、树、图等数据结构)的帮助,才能更好地处理问题。所以原创 2014-04-10 18:16:20 · 1298 阅读 · 0 评论 -
排序(一) 冒泡排序
思路两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。冒泡排序初级版原创 2014-04-16 23:03:37 · 794 阅读 · 0 评论 -
排序(二)简单选择排序、直接插入排序、希尔排序
本编博客介绍了两种三种排序方法,包括1. 简单选择排序原创 2014-04-17 23:24:00 · 995 阅读 · 0 评论 -
QuickSort 快速排序算法
引子:快速排序算法,被列为 20 世纪 十大算法之一。希尔排序相当于直接插入排序的升级,只是增加了increment的设置,利用了基本有序的思想,同属于插入排序类。堆排序相当于简单选择排序的升级,他们同属于选择排序类,只是通过构建堆(完全二叉树)的方式,让选择最大项更加快速。而快速排序其实就是我们前面认为最慢的冒泡排序的升级,他们同属于交换排序类。即它也是通过不断比较和移动交换来实现排序的,不原创 2014-04-22 21:50:02 · 900 阅读 · 0 评论 -
二叉排序树(查询、插入、删除)
“二叉排序树,又称为二叉查找树。它或者是一颗空树,或者具有下列性质的二叉树。若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左、右子树也分别为二叉排序树。构造一颗二叉排序树的目的,其实并不是为了排序,而是为了提高查找和插入删除关键字的速度。不管怎么说,在一个有序数据集上的查找,速度总原创 2014-04-14 22:00:03 · 48792 阅读 · 18 评论 -
平衡二叉树(AVL树)
平衡二叉树或者是一颗空树,或者它的左右子树都是平衡二叉树,且左子树和右子树的深度之差不超过1 。BF(Balance Factor)我们将二叉树上节点的左子树深度减去右子树深度的值成为平衡因子。那么平衡二叉树上所有节点的平衡因子只可能是-1,0,1.只要二叉树上有一个节点的平衡引子的绝对值大于1,则该二叉树就是不平衡的。原创 2014-04-15 21:19:50 · 1701 阅读 · 0 评论 -
排序(三) 堆排序
堆排序原创 2014-04-20 23:24:58 · 1286 阅读 · 0 评论 -
查找(顺序查找、二分查找、插值查找)
查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。查找表按照操作方式来分有两大种:静态查找表和动态查找表。动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素。1. 顺序查找/* 顺序查找,a为数组,n为要查找的数组元素个数,key为要查找的关键字*/int Sequential_Sear原创 2014-04-11 17:58:49 · 30986 阅读 · 10 评论 -
zoj 1002 Fire Net
#include using namespace std;int visit[10][10], count, ret, N;bool isLocate(int x, int y) { for(int j = y; j >= 1; j--) { if( visit[x][j] == 1 ) return 0; if(visit[x][j] == 2) break;原创 2016-02-23 09:28:56 · 532 阅读 · 0 评论