
算法分析与设计
文章平均质量分 89
CourageK
计算所
展开
-
「巧妙的计数」丑数问题、sort colors等排序问题
丑数问题原创 2015-09-08 16:41:56 · 417 阅读 · 0 评论 -
将中缀表达式转化为逆波兰式(c++实现)
/************************************************************************* > File Name: ReversePolish.cpp > Author: Shaojie Kang > Mail: kangshaojie@ict.ac.cn > Created Time: 2015年09月16日 星期三 11时1原创 2015-09-16 15:19:59 · 3089 阅读 · 1 评论 -
「分治法」Binary Tree Maximum Path Sum
/************************************************************************* > File Name: BinaryTreeMaximumPathSum.cpp > Author: Shaojie Kang > Mail: kangshaojie@ict.ac.cn > Created Time: 2015年09月1原创 2015-09-16 16:18:04 · 486 阅读 · 0 评论 -
循环队列的面向对象实现(C++)
/************************************************************************* > File Name: CycleQueue.cpp > Author: Shaojie Kang > Mail: kangshaojie@ict.ac.cn > Created Time: 2015年09月16日 星期三 10时14分0原创 2015-09-16 10:34:35 · 466 阅读 · 0 评论 -
栈的链表实现(C++)
/************************************************************************* > File Name: StackImplement.cpp > Author: Shaojie Kang > Mail: kangshaojie@ict.ac.cn > Created Time: 2015年09月16日 星期三 10时原创 2015-09-16 10:58:48 · 463 阅读 · 0 评论 -
「图论」最短路径长度-Floyd
【1】为什么需要弗洛伊德算法?带权图中单个源点到所有顶点的最短路径问题可以用《迪杰斯特拉算法》求解。那如果要求图中每一个顶点与其它顶点之间的最短路径呢?类似可以想到的方法为:每次以一个顶点为源点,重复执行地杰斯特拉算法算法n次。这样,理论上我们便可以求得每一个顶点与其它顶点的最短路径,总的执行时间为O(n3)。好吧!为了实现这个中需求,可以采用另外一种求解算转载 2015-09-17 16:51:52 · 1257 阅读 · 0 评论 -
「图论」最短路径长度-Dijkstra
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。其基本思想是,设转载 2015-09-17 16:08:26 · 3576 阅读 · 0 评论 -
「数据结构」红黑树
介绍另一种平衡二叉树:红黑树(Red Black Tree),红黑树由Rudolf Bayer于1972年发明,当时被称为平衡二叉B树(symmetric binary B-trees),1978年被Leonidas J. Guibas 和Robert Sedgewick改成一个比较摩登的名字:红黑树。红黑树和之前所讲的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,转载 2015-09-17 22:02:12 · 384 阅读 · 0 评论 -
「图论」最小生成树-Prime算法
Prim算法1.概览普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗转载 2015-09-17 17:04:16 · 980 阅读 · 0 评论 -
史上最浅显易懂的并查集算法
并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?)来看一个实例,杭电1232畅通工程首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点转载 2015-09-17 19:48:58 · 1267 阅读 · 1 评论 -
「图论」最小生成树-kruskal算法
kruskal算法的精髓在于:每次选取一条边。该边同时满足:1、在当前未选边中权值最小;2、与已选边不构成回路。直到选取n-1条表是算法结束。找到MST活判断不存在MST。 代码设计:1、利用优先级队列将权值小的边放到队列最前,优先出对,保证了每次选择的都是权值最小的边。2、利用并查集的查找及结合把同处同一连通分量中的顶点连到同一父节点下。这转载 2015-09-17 20:18:11 · 422 阅读 · 0 评论 -
双向链表的实现
/************************************************************************* > File Name: DList.h > Author: Shaojie Kang > Mail: kangshaojie@ict.ac.cn > Created Time: 2015年09月15日 星期二 10时52分35秒原创 2015-09-15 15:09:36 · 379 阅读 · 0 评论 -
线性表的C++实现
/************************************************************************* > File Name: List.cpp > Author: Shaojie Kang > Mail: kangshaojie@ict.ac.cn > Created Time: 2015年09月15日 星期二 09时43分55秒原创 2015-09-15 10:49:10 · 435 阅读 · 0 评论 -
「深度优先遍历」 输出电话号码对应的英语单词
/************************************************************************* > File Name: TelephoneNumbers.cpp > Author: Shaojie Kang > Mail: kangshaojie@ict.ac.cn > Created Time: 2015年09月11日 星期五 1原创 2015-09-11 16:11:27 · 499 阅读 · 0 评论 -
「编程之美扩展问题2.5」实时排名的树形分区设计
树形分区设计 均匀分区查询算法的失败是由于积分分布的非均匀性,那么我们自然就会想,能不能按二八定律,把score_range表设计为非均匀区间呢?比如,把低分区划密集一点,10分一个区间,然后逐渐变成100分,1000分,10000分 … 当然,这不失为一种方法,不过这种分法有一定的随意性,不容易把握好,而且整个系统的积分分布会随着使用而逐渐发生变化,最初的较好的分区方法可能会变得不适应未来的转载 2015-09-08 14:35:08 · 699 阅读 · 0 评论 -
「归并思想」归并思想中的第二个函数merge可以应用到其他问题中
归并排序知识点时间复杂度归并排序的形式就是一棵二叉树,它需要遍历的次数就是二叉树的深度,而根据完全二叉树的可以得出它的时间复杂度是O(n*log2n)。空间复杂度由前面的算法说明可知,算法处理过程中,需要一个大小为n的临时存储空间用以保存合并序列。算法稳定性在归并排序中,相等的元素的顺序不会改变,所以它是稳定的算法。归并排序和堆排序、快速排序的比较原创 2015-09-08 16:10:33 · 544 阅读 · 0 评论 -
【直接生成法】直接生成想要的数据,而不是暴力搜索
在我遇到的众多算法题中,有些题目如果用常规的排序或搜索算法,很难达到最优的时间或空间复杂度。那么此时,可以换一种角度,直接生成法可以避免排序、暴力搜索。1. 生成丑数2.对1到n的连续自然数进行字典顺序的排练原创 2015-09-06 16:52:01 · 492 阅读 · 0 评论 -
「分而治之」化大为小
/************************************************************************* > File Name: MaximumMinimum.cpp > Author: Shaojie Kang > Mail: kangshaojie@ict.ac.cn > Created Time: 2015年09月10日 星期四 16时原创 2015-09-10 17:04:46 · 782 阅读 · 0 评论 -
「改进的快速排序」时间复杂度接近O(n)
1.快速排序知识点回顾:快速排序采用了一种分治的策略,通常称其为分治法(Divide-and-Conquer)。平均时间复杂度为:O(nlogn) 最好时间复杂度为:O(nlogn), 每次找的基准数最佳,为每个区间的中值。 最坏时间复杂度为:O(n2), 数组递增或者递减。空间复杂度:快速排序在系统内部需要一个栈来实现递归。若每次划分较为均匀,原创 2015-09-07 14:24:39 · 1426 阅读 · 0 评论 -
编程之美2.20 程序理解和时间分析
这是《编程之美》的2.20题目,给出一段C#代码,要求不用电脑,理解程序并回答问题。下面是从C#代码中改写成的C++代码:[cpp] view plaincopy#include #include using namespace std; int main() { int rg[] = {2,3,4,5,转载 2015-09-11 14:40:06 · 513 阅读 · 0 评论 -
「递归逻辑实现」求一棵树中的最远距离
分析递归问题主要思路是:1. 先弄清楚递归的顺序。在递归的实现中,往往需要假设后续的调用已经完成,在此基础上,才实现递归的逻辑。在该题中,假设已经把后面的长度计算出来了,然后继续考虑后面的逻辑;2. 分析清楚递归体的逻辑,然后写出来。比如在上面的问题中,递归体的逻辑就是如何计算两边的距离。3. 考虑清楚递归退出的边界条件。也就是说,哪些地方应该写return./******************原创 2015-09-12 11:23:11 · 783 阅读 · 0 评论 -
「两个指针的应用」最短摘要的生成
/************************************************************************* > File Name: ShortestContaining.cpp > Author: Shaojie Kang > Mail: kangshaojie@ict.ac.cn > Created Time: 2015年09月12日 星期六原创 2015-09-12 10:34:33 · 335 阅读 · 0 评论 -
「动态规划」利用前辈们的胜利果实走好现在的路
/************************************************************************* > File Name: MaxSumOfSubarray.cpp > Author: Shaojie Kang > Mail: kangshaojie@ict.ac.cn > Created Time: 2015年09月11日 星期五 0原创 2015-09-11 09:52:04 · 356 阅读 · 0 评论 -
「动态规划」三维DP
/************************************************************************* > File Name: VectorSplit.cpp > Author: Shaojie Kang > Mail: kangshaojie@ict.ac.cn > Created Time: 2015年09月11原创 2015-09-11 11:46:32 · 2380 阅读 · 0 评论 -
【字符串】最长连续回文串(Longest Palindromic Substring)
题目: Given a string S, find the longest palindromic substring in S.给出一个字符串S,找到一个最长的连续回文串。例如串 babcbabcbaccba 最长回文是:abcbabcba这个题目小弟给出3中解法,前两种的都是 O(n^2), 第三种思路是O(n). 思路1. 动转载 2015-09-18 16:27:12 · 526 阅读 · 0 评论