算法与数据结构
文章平均质量分 79
buaa_shang
这个作者很懒,什么都没留下…
展开
-
能否采用动态规划的标志
1.能否找到最优子结构2.子问题是否重叠原创 2012-11-21 09:24:49 · 572 阅读 · 0 评论 -
计算机科学中最重要的32个算法
转自:http://www.infoq.com/cn/news/2012/08/32-most-important-algorithmsA* 搜索算法——图形搜索算法,从给定起点到给定终点计算出路径。其中使用了一种启发式的估算,为每个节点估算通过该节点的最佳路径,并以之为各个地点排定次序。算法以得到的次序访问这些节点。因此,A*搜索算法是最佳优先搜索的范例。集束搜索(又名定向搜索,Beam原创 2013-06-21 22:11:39 · 1925 阅读 · 0 评论 -
AVL--平衡二叉查找树
平衡二叉树失衡的四种情况:AVL树节点声明:struct AvlNode;typedef struct AvlNode *Position;typedef struct AvlNode *AvlTree;struct AvlNode{ ElementType Element; AvlTree Left; AvlTree Right; int H原创 2013-08-19 21:49:54 · 936 阅读 · 0 评论 -
各种排序算法
#include #include #define LeftChild(i) (2 * (i) + 1)/* 插入排序 */void InsertionSort(int *A, int n){ int j, p, tmp; for (p = 1; p < n; p++) { tmp = A[p]; for (j = p; j >原创 2013-08-22 19:18:47 · 666 阅读 · 0 评论 -
KMP算法--转
作者: 阮一峰日期: 2013年5月 1日字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。原创 2013-08-11 23:13:15 · 7799 阅读 · 19 评论 -
树和二叉查找树的实现
树的声明。和二叉查找树的实现原创 2013-08-19 17:06:08 · 920 阅读 · 0 评论 -
面试题之数组统计
题目:给定数组A,大小为n,数组元素为0到n-1的数字,不过有的数字出现了多次,有的数字没有出现。请给出算法和程序,统计哪些数字没有出现,哪些数字出现了多少次。要求在O(n)的时间复杂度,O(1)的空间复杂度下完成。 解法一:直接用两层遍历,O(n^2)的时间复杂度,O(1)的空间复杂度#include #include int main(){ int n原创 2013-08-29 15:48:00 · 2038 阅读 · 1 评论 -
动态规划介绍
动态规划终于来到了算法设计思想中最难,也最有趣的这部分,在去年的google笔试中,7道算法设计题有2道动态规划(Dynamic Programming)。看了这么久的算法,这部分也是唯一感觉到了比较难的地方,从这篇文章开始,将花连续的篇幅来讨论一些动态规划的问题。这包括书上介绍过的计算二项式系数,Warshall算法求传递闭包,Floyd算法求完全最短转载 2013-09-17 14:38:38 · 1277 阅读 · 1 评论 -
并查集之POJ1308
DescriptionA tree is a well-known data structure that is either empty (null, void, nothing) or is a set of one or more nodes connected by directed edges between nodes satisfying the following proper原创 2013-09-27 08:11:07 · 1489 阅读 · 0 评论 -
并查集之HDOJ1232
畅通工程Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 23971 Accepted Submission(s): 12449Problem Description某省调查城镇交通状况,得到现有城镇道路原创 2013-09-27 08:47:09 · 779 阅读 · 0 评论 -
POJ3633
[题目大意]: 在一个3*n(0 [输入]:每一行一个测试数据n,输入-1结束.[输出]:对每一个测试数据,输出放置方法的种数.Sample Input2812-1Sample Output31532131[解题分析]:(来自网上)1、n为奇数;由于3×n≠2×m (其中,m为构成3×n矩形所需的2×1矩形数),易知,总组合数S(n)原创 2013-06-19 10:17:48 · 926 阅读 · 0 评论 -
表达式树
用到了栈,并且递归实现了中序遍历,后序遍历,前序遍历。同时应该学会union的使用方法。基础知识:一、表达式树 表达式树的树叶是操作数(operand),加常数或变量名字,而其他的结点为操作数(operator)。由于这里所有的操作都是二元的,因此这棵特定的树正好是二叉树,虽然这是最简单的情况,但是结点还是有可能含有多于两个的儿子,这里我们不讨原创 2013-06-18 21:30:45 · 19663 阅读 · 5 评论 -
Fibonacci数列的各种解法
Fibonacci数列: 描写了动物滋生数量、植物花序改变等大措施则。作为一个经典的数学识题,Fibonacci数列常作为例子展目前途序设计、数据构造与算法等多个相干学科中。 下面容易地分析一下常见的Fibonacci数列求解算法。 1、递归法。大多数教材在解说递归算法时总迷恋以Fibonacci数列为例,这是因为我们能够直观地从定义公式的第三行看出Fibonacci数列的原创 2013-03-13 11:07:55 · 6288 阅读 · 1 评论 -
POJ1258--贪心&最小生成树的prim算法
用prim算法实现,T1集合为所有点集合,T2集合表示已经是最小生成树中的点lowcost[maxn]用来实现集合T1内各顶点到集合T2中各顶点的权值最小边的权值nearvex[maxn]用来实现集合T1内顶点距集合T2中哪个顶点的距离最小prim算法的思想:初始:lowcost[k]=edge[v0][k] , nearvex[k]=v0;其中v0指的是从哪点来构造最小生成树。原创 2013-03-28 20:53:28 · 1491 阅读 · 0 评论 -
POJ1007
#include using namespace std;int cmp(const void *a, const void *b){ return(*(int *)a - *(int *)b);}int main(){ int i, j, k, n, m, count[100], newcount[100]; char **dna; cin >> n原创 2013-03-22 11:14:47 · 768 阅读 · 0 评论 -
求最长子序列和
法一:O(n^3)#include #include int sub_Sum(int a[], int left, int right){ int i, temp_sum = 0; for(i = left; i <= right; i++) { temp_sum += a[i]; } return temp_sum;}in原创 2013-06-09 00:58:31 · 4909 阅读 · 3 评论 -
计算最大公因数的欧几里德算法
#include #include int gcd(int m, int n){ int rem; while(n > 0) { rem = m % n; m = n; n = rem; } return m;}int main(){ int m, n; printf原创 2013-06-12 19:03:23 · 1626 阅读 · 0 评论 -
非波那切数列
原始做法---会超时#include #include long int fib(n){ if(n <= 1) return 1; else return fib(n-1) + fib(n-2);}int main(){ int n; scanf("%d", &n); printf("%ld\n", fib原创 2013-06-12 10:59:18 · 2767 阅读 · 0 评论 -
栈的应用---平衡符号
判断一行字符串输入"各种括号"是否是合法的-----------------------栈用数组实现如:[()]是合法的(balance)[(])是不合法的(imbalance)#include #include #include typedef struct Mystack *Stack;struct Mystack { int Capacity;原创 2013-06-17 23:23:59 · 3863 阅读 · 2 评论 -
用栈计算逆波兰式
#include #include #include typedef struct Mystack *Stack;struct Mystack { int Capacity; /* 栈的容量 */ int Top_of_stack; /* 栈顶下标 */ int *Array; /* 存放栈中元素的数组 */};/* 栈的创建 */原创 2013-06-18 00:50:47 · 2923 阅读 · 1 评论 -
利用数组栈将中缀表达式转换成后缀表达式
#include #include #include typedef struct Mystack *Stack;struct Mystack { int Capacity; /* 栈的容量 */ int Top_of_stack; /* 栈顶下标 */ char *Array; /* 存放栈中元素的数组 */};/* 栈的创原创 2013-06-18 11:15:09 · 1933 阅读 · 0 评论 -
图的邻接表表示法的实现
#include #include #define MaxVertexNum 50typedef struct node *EdgeNode;typedef struct vnode *VertexNode;typedef struct graph *ALGraph;struct node{ //边表节点 int adjvex; //邻接点域 EdgeNode原创 2013-08-27 16:03:44 · 10044 阅读 · 0 评论