有没有办法知道.NET预定义方法的确切时间复杂度。就像我想知道
的复杂性一样String.Contains()
或
Hashtable.ContainsKey()
Microsoft是否共享此信息?
答案 0 :(得分:3)
是的,在MSDN中:)
此方法是O(1)操作。
如果源的类型实现 ICollection,包含方法 该实现被调用 获得结果。否则,这个 方法确定是否来源 包含指定的元素。
枚举一旦终止,就会终止 匹配元素被找到。
因此,对于String,它将是O(n)。
答案 1 :(得分:1)
有几篇帖子提到了Reflector,这是一个很好的工具但不再免费。提供类似服务的免费工具是ILSpy,如果您不想购买反射器,请查看。
答案 2 :(得分:0)
一种可能性是使用像Reflector这样的工具,并亲自查看方法的实现。然后,您应该能够确定大多数方法的复杂性(如果它们依赖于许多其他方法,那么跟踪所有调用计算的方法可能很麻烦。)
我认为没有一个页面明确列出了所有方法的复杂性。
答案 3 :(得分:0)
你可以使用Reflector和Code Metrics插件轻松找到它。
答案 4 :(得分:0)
反射器是一个显而易见的选择,可以找到您需要的信息,如其他答案所示。然而,这不再是一个免费的工具,虽然不是太昂贵。
免费的替代方案是查看.NET框架库的源代码。 Scott Guthrie has a post提供了访问和调试源代码的一些信息和链接。