Dijkstra算法,是有向/无向加权图(就是每条边都有长度)中,计算两个点之间最短距离的有效方法,在使用堆排序的情况下,它的时间复杂度为O(Nlog(N+M)),(这里N代表节点数,M代表边数)很接近线性了,还是非常好的。
不过,Dijkstra算法有一个限制,就是它只适用于边长不为负的图。如果一张图里有负数长的边长,那么Dijkstra算法就不适用了。这时候就需要另外的算法了。
为什么不适用呢?其实很容易就可以找到反例。...
分类:
编程语言 时间:
2014-11-20 23:46:29
阅读次数:
278
一、代码调用方式:public static readonly Logger Logger = LogManager.GetCurrentClassLogger(); Logger.Trace("trace log message"); Logger.Debug("de...
分类:
其他好文 时间:
2014-10-28 23:33:11
阅读次数:
264
拓扑排序如果是随便输出的话,那么只需要用一个队列就可以维护了。复杂度O(n)如果是要求字典序最小输入的话,使用小堆维护,正常建边即可。复杂度O(nlog(n))如果要求尽量使最小值在前输出的话(例如312 优先级高于 231)那么可以反向建边,然后在使用大堆维护,最后把顺序reverse()下。复杂...
分类:
编程语言 时间:
2014-10-20 13:10:27
阅读次数:
202
题目大意:给定一棵树,可以删掉k条边,求删掉后森林中所有树直径的最大值的最小值
最大值最小,典型的二分答案
此题我们二分树的直径,每次二分DFS一次,对于每个节点统计出所有子树删边后的dis,排序,贪心删掉最大的,直到最大的两个子树相加不会超过二分的答案为止
时间复杂度O(nlog^2n)
老子的二分居然写挂了。。。桑不起啊啊啊啊
#include
#include
#include
#...
分类:
其他好文 时间:
2014-10-13 23:22:27
阅读次数:
183
题目大意:给定一棵树,每个节点有权值,询问两个节点路径上的权值第k小
这题很卡时间。。。
树链剖分+二分+树套树的O(nlog^4n)做法可以去死了
没有修改操作,树链剖分+二分+划分树O(nlog^3n),还是死了
我怒了,裸学了一发可持久化线段树(不看任何代码OTZ,我是怎么做到的0.0),二分+主席树,O(nlog^2n),居然还是死了!
最后发现我SB了,完全没有必要二分,直...
分类:
其他好文 时间:
2014-10-13 20:02:37
阅读次数:
373
题目大意:有n个路由器,他们由n-1条边连接(形成一棵树)。每一个路由器有一个延时值。有两种操作:
1.查询树上x,y两点之间的路径上第k大的权值是多少
2.修改x位置的权值为y
思路:当我大概想到怎么做这个题的时候,所想的时间复杂度已经达到了O(nlog^4n),偷偷的瞄了一眼数据范围...(N,Q
“没事,写吧,我10多秒就过了。。。”
秒就过了。。。就过了。。。过了。。。了...
分类:
Web程序 时间:
2014-10-09 15:39:18
阅读次数:
281
最长上升子序列LIS问题属于动态规划的初级问题,用纯动态规划的方法来求解的时间复杂度是O(n^2)。但是如果加上二叉搜索的方法,那么时间复杂度可以降到nlog(n)。 具体分析参考:http://blog.chinaunix.net/uid-26548237-id-3757779.html 代...
分类:
其他好文 时间:
2014-10-05 22:41:09
阅读次数:
194
之前我介绍过如何使用log4net来记录日志,但最近喜欢上了另一个简单好用的日志框架NLog。 关于NLog和log4net的比较这里就不多讨论了,感兴趣的朋友可以参看.NET日志工具介绍和log4net vs. Nlog这两篇文章。本文主要介绍一下如何在项目中使用NLog。在Nuget中安装NLo...
分类:
其他好文 时间:
2014-10-02 02:32:52
阅读次数:
982
归并排序算法稳定,数组需要O(n)的额外空间,链表需要O(log(n))的额外空间,时间复杂度为O(nlog(n))NOTE:新数组的创建和数据拷贝是硬伤,我尝试了一下只申请一个workspace,应该还不错吧,没有理论论证代码: 1 package sorts; 2 3 import java.....
分类:
其他好文 时间:
2014-09-09 10:53:28
阅读次数:
262
这题一看10000的数据量就知道必须用nlog(n)的时间复杂度。
所以特意去看了最长上升子序列的nlog(n)的算法。
如果有2个位置,该位置上的元素为A[i]和A[j],并且他们满足以下条件:
1.dp[i] = dp[j] (dp[x]代表以x结尾的最长上升子序列长度)
2.A[i]
3.i
那么毫无疑问,选择dp[i] 一定优于选择dp[j]
那么我们可以利用g[i...
分类:
其他好文 时间:
2014-09-06 22:34:24
阅读次数:
286