数据结构与算法
文章平均质量分 59
handerliu
这个作者很懒,什么都没留下…
展开
-
查找算法归纳
静态查找算法:对表中的记录只进行查找操作顺序查找:时间复杂度:O(n)优点:对数据集合中元素的有序性、存储结构都没有任何要求缺点:查找效率低二分查找:时间复杂度:O(logn)优点:查找效率高缺点:要求数据集合中的元素是顺序存储且有序的分块查找:将主表分成若干个子表,为每个子表建立一个索引值,组成一个索引表,索引表要求是有序的。查找分为两个过程:原创 2012-02-28 12:28:54 · 926 阅读 · 0 评论 -
排序算法
选择排序1.直接选择排序时间复杂度:O(N^2)空间复杂度:O(1)算法思想:进行N趟排序,每一趟都从未排序序列中选择一个最大或最小的值放入排序序列中稳定性:不稳定templateint min_key(KeyType A[], int low, int high) //从数据集合中选择最小的关键字,并返回数组下标{ int min_pos = low; for(i原创 2012-10-02 19:07:24 · 728 阅读 · 0 评论 -
图的概念
连通图:无向图中每一对顶点间都存在一条路径强连通图:有向图中每一对顶点间都存在一条路径弱连通图:有向图去掉边的方向后可以变成连通图完全图:每一对顶点间都存在一条边邻接矩阵:用一个二维数组來表示图邻接表:用一个数组存储图的结点,每个结点保存一个链表,链表中存放所有邻接的顶点拓扑排序:对有向无圈图的一种排序,它使得如果存在一条vi到vj的路径,那么在排序中vj出现在vi的后面。原创 2012-09-25 20:18:52 · 655 阅读 · 0 评论 -
B-tree(C++实现)
定义一棵M(M>2)阶B-tree应该满足以下定义:每个结点的孩子结点个数不超过M个;非根结点的孩子结点个数不少于ceiling(M/2)个;N个结点关键字对应N+1个孩子结点;假设结点有关键件key1、key2、...、keyN,则有孩子结点指针child1、child2、...、childN、child(N+1),且有MaxKeyValue(child1)结点中存有关键字和原创 2012-09-16 16:41:34 · 4999 阅读 · 0 评论 -
B+树(C++实现)
定义:一棵M(M>2)阶的B+树满足以下定义:1.B+树中包含两种类型的结点:内结点和叶子结点。内结点存有关键字和孩子结点的指针,叶子结点存有关键字和数据;2.每一个关键字都会在叶子结点中出现,叶子结点按照关键字的大小排序,叶子结点中会存有指向兄弟结点的指针;3.一棵B+树一般存有两个指针:一个指向根结点,一个指向存有最小关键字的叶子结点;4.每个内结点至多原创 2012-09-15 16:28:50 · 24121 阅读 · 14 评论 -
算法导论-VLSI芯片测试问题
问题叙述:4-6 VLSI芯片测试 Diogenes教授有n个被认为是完全相同的VLSI芯片,原则上它们是可以互相测试的。教授的测试装置一次可测二片,当该装置中放有两片芯片时,每一片就对另一片作测试并报告其好坏。一个好的芯片总是能够报告另一片的好坏,但一个坏的芯片的结果是不可靠的。这样,每次测试的四种可能结果如下: A芯片报告 B芯片原创 2012-03-30 15:41:58 · 6840 阅读 · 1 评论 -
大牛们的博客网址收藏
数据结构与算法http://blog.csdn.net/v_july_v/article/details/6543438http://www.cppblog.com/converse/archive/2009/10/31/99886.htmlwindows内存管理http://blog.chinaunix.net/uid-22562725-id-307986原创 2012-04-20 15:19:15 · 1219 阅读 · 0 评论 -
B树的原理与实现(C++)
B树的定义一棵B树T是具有如下性质的有根树(根为root[T]):1)每个结点x有如下域: a)n[x],当前存储在结点x中的关键字个数; b)n[x]个关键字本身,以非降序存放,因此key1 [x]≤key2[x]≤…≤keyn[x][x]; c)leaf[x],是一个布尔值,如果x是叶子结点的话,则它为TRUE,如果x为一个内结点,则它为FA原创 2012-04-20 13:12:33 · 16527 阅读 · 5 评论 -
位图排序
利用位图对数据进行排序。前提:待排数据不能有重复,且要能估计出待排数据值的上界(越精确效率越高)时间复杂度:设待排数据值上界为M,待排数据量为N,则时间复杂度为O(2M+N)c++实现代码:#ifndef BITMAP_SORT_H#define BITMAP_SORT_H//sort the array by bitmap, it demand all elements o原创 2012-05-04 12:55:56 · 692 阅读 · 0 评论 -
高效率的取幂运算
计算X^N的常见算法是使用N-1次乘法自乘,时间复杂度为O(n)。使用下面的递归算法更好,时间复杂度为O(logn):templateT Pow(T x, unsigned int N){ if (0==N) { return 1; } else if (1==N) { return x; } else if (0==N%2) { return Pow(x*x,原创 2012-02-28 15:21:07 · 2000 阅读 · 3 评论 -
欧几里德算法
求两个数的最大公因数,如gcd(50, 15)=5时间复杂度:O(logn)unsigned int Gcd(unsigned int M, unsigned int N){ unsigned int temp; //令M>=N if (M<N) { temp = M; M = N; N = temp; } while(N>0) { temp = M % N原创 2012-02-28 14:49:04 · 561 阅读 · 3 评论 -
最大子序列问题及其求解
问题说明:给定整数(可能有负数),求的最大值(为方便起见,如果所有整数均为负数,则最大子序列和为 0 )。三种实现方法:方法一:O(n^2)templateT MaxSubSequenceSum_1(const T A[], int length){ T thisSum = 0; T maxSum = 0; for(int i=0; i<length; ++i) {原创 2012-02-28 14:29:39 · 466 阅读 · 1 评论 -
链表
关键词:头指针、头结点、循环链表、双向链表头指针:头指针指向链表中的第一个结点带头结点的链表:无论链表是否为空,头结点始终存在,头结点中的值域与链表元素无关。头指针始终指向头结点带头结点的链表的好处:不带头结点的链表,头指针是指向头结点的,在对链表进行删除、插入操作时,需要检测头结点是否发生了变化。而采用带头结点的原创 2012-02-29 13:38:21 · 776 阅读 · 1 评论 -
递归
定义:一个函数用它自己来定义时就称为递归递归的四条基本法则:1.基准情形(base case):必须总要有某些基准的情形,它们不用递归就能进行求解2.不断推进(making progress):对于那些需要递归求解的情形,递归调用必须总能够朝着产生基准情形的方向推进3.设计法则(design rule):假设所有的递归调用都能运行4.合成效益法则(compound intere原创 2012-02-28 12:37:16 · 2064 阅读 · 0 评论 -
01背包问题【动态规划】
问题:假设有n个物品,每个物品都是有重量的,同时每个物品也是有价值的,要求把这些物品放到一个背包中,这个背包的载重量是有限制的,怎么使得背包里面的物品总价值最大?符号表示:N:物品个数W:背包载重量w[i]:物品i的重量(1v[i]:物品i的价值(1c[i, j]:到物品i为止,背包重量限制为j的最优解(1分析:最优解结构:对于物品i,只原创 2014-06-24 15:21:35 · 939 阅读 · 0 评论