随笔分类 -  Algorithm

摘要:Kosaraju算法是一种常见的求图的强联通分量的算法,该算法先从任意结点开始对原图G进行一次DFS后序遍历,之后依据第一次DFS的结果的反向序列(即根据reverse postordering),对原图的反向图G’进行前序的DFS。在第二次DFS中,每个联通分量即为一个强联通分量。 算法是很简单,不过之前并没有完全搞明白,昨天晚上仔细想了下,总算弄明白了。事实上后序遍历一个图得到的序列包含了原图重要的结构信息,正是这些结构信息保证了第二次DFS能得到正确的结果。 阅读全文
posted @ 2014-01-09 10:24 Zealoct 阅读(1006) 评论(0) 推荐(1)
摘要:Algorithms: Design and Analysis, Part 1 这门课的第六个编程作业的第一道题,之前的编程作业题都比较直观,而这一题需要用到一点简单的优化,相比其他的题目有意思多了。 题目描述:   输入文件每一行有一个数字(可能有重复),在这所有的数字中,任选不想等的两个数字x和y,并令t=x+y,求问在[-10000, 10000]区间中存在多少这样的t。 阅读全文
posted @ 2013-08-19 16:46 Zealoct 阅读(1208) 评论(0) 推荐(0)
摘要:Algorithms: Design and Analysis, Part 1 这门课的第二个编程问题。 题目要求的选取pivot的方法共分三种:1)选取第一个;2)选取最后一个;3)选取第一个数、最后一个数和位于中间的数这三个数中的中间数(既不是最大也不是最小),分别计算在这三种方法下快排需要进行多少次比较才能完成。在计算比较数的时候,求中间数所需要的比较数不计入内,也就是说排序一个长度为m的子串所需要的比较数是m-1(pivot分别与m-1个数进行比较) 阅读全文
posted @ 2013-07-23 10:56 Zealoct 阅读(318) 评论(0) 推荐(0)