摘要:Floyd–Warshall(简称Floyd算法)是一种著名的解决任意两点间的最短路径(All Paris Shortest Paths,APSP)的算法。从表面上粗看,Floyd算法是一个非常简单的三重循环,而且纯粹的Floyd算法的循环体内的语句也十分简洁。我认为,正是由于“Floyd算法是一种...
阅读全文
随笔分类 - 算法设计
摘要:顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情...
阅读全文
摘要:前言本文翻译自TopCoder上的一篇文章:Dynamic Programming: From novice to advanced,并非严格逐字逐句翻译,其中加入了自己的一些理解。水平有限,还望指摘。前言_我们遇到的问题中,有很大一部分可以用动态规划(简称DP)来解。 解决这类问题可以很大地提升你...
阅读全文
摘要:问题描述:现在有非常大量的一堆对象,比如有几十亿甚至上百亿个。对象本身是什么可以忽略,每个对象都有唯一标识符和一个正整数属性值,属性值范围有限(不大于一亿)。在单核机器上,内存和磁盘空间充足,用什么方法可以最快地输出属性值最小的若干(如一万)个对象,要求输出结果按照属性值排序。先说个题外话。前几天面...
阅读全文
摘要:问题描述:在单向链表中,每个结点都包含一个指向下一个结点的指针,最后一个结点的这个指针被设置为空。但如果把最后一个结点的指针指向链表中存在的某个结点,就会形成一个环,在顺序遍历链表的时候,程序就会陷入死循环。我们的问题就是,如何检测一个链表中是否有环,如果检测到环,如何确定环的入口点(即求出环长,环...
阅读全文
摘要:1.1 频度统计法。频度统计法指以程序中语句执行次数的多少作为算法时间度量分析的一种方法。通常情况下,算法的时间效率主要取决于程序中包含的语句条数和采用的控制结构这两者的综合效果。因此,最原始且最牢靠的方法是求出所有主要语句的频度f(n),然后求所有频度之和。例如:如下形式的语句段:for (i=1...
阅读全文