随笔分类 - Computer algorithm
计算机算法
摘要:拜读《算法导论》至DP和贪心算法处,觉得有必要理一下思路。 书上对DP介绍了几经典的案例,LCS,矩阵连乘与最优二叉搜索都是很经典的应用。DP是一种从下至上的优化算法,其实对于寻优,至上而下的寻优算法从理论上也是可行的,然后之下而上效率比至上而下大大提高,原因是,当我们采用至上而下的递归式时,实际上做了许多重复的运算,递归树对重复问题的运算结果其实只需运算一次,再次用到时只需读取。本人对DP的理解还不够深刻,但是已经能够体会到DP的精髓在于寻找最优子问题,即将当前问题分解成几个子问题合并的结果,并且能够证明:为了取得当前问题的最优解,其子问题也必须是最优的。贪心算法是一种特殊的DP,理论上D.
阅读全文
摘要:二叉搜索树中,左子树值大于根节点,右子树值大于根节点,每一层子树都遵守以上规则。二叉搜索能够大大加快搜索速度,常规的搜索只能一个个比较,算法复杂度为n,二叉搜索树由于其结果特点能够将搜索负载度减小为logn。首先定义二叉树的节点数据结构:(本题根据POJ2418:http://poj.org/problem?id=2418)struct Tree{ struct Tree *p; struct Tree *l; struct Tree *r; char name[31]; int num;};首先考虑节点的插入:从根节点开始,如果待插入节点的值大于根节点则向右子树查找,否则向左子树查找,直到.
阅读全文
摘要:著名的单源最短路算法有bellmanford(适合有负权边的图),以及dijkstra算法,dijkstra算法的算法是基于贪心算法的,i与j之间的最短路基于表达式minlen[i][j]=min(minlen[i][j],min[i][k]+min[k][j]),其中k为中间结点并且是已经被扫描过的结点,开始的时候只有已扫描集合中只有源结点,初始化min[i][k]=mat[i][k](如果是无向图,则mat[i][j]=mat[j][i]),然后根据上述的贪心表达式依次求出,直到所有结点都被扫描到了。 基于单源最短路,多源最短路的朴素算法是对每个结点进行一次单源最短路计算,最后将结果保存.
阅读全文
摘要:自己写了下prim(),以前都是用模版的,发现写一次可以更好有助于理解。 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=203 题目没看,算了一下发现时最小支撑树就用prim去做了,不过ZOJ的输出实在恶心,特别是水题的输出一般比较BT。PR了多次。简单的Prim算法,只返回最小路径长,需要返回其他参数可以做适当修改。double prim(){int i,j,nd1,nd2,num;double lenn=0,max;node[0]=true;num=1;while(num<n){ max=10000000; fo
阅读全文
浙公网安备 33010602011771号