有什么方法可以知道.NET预定义方法的确切时间复杂度。就像如果我想知道的.NET BCL API或框架方法的时间复杂度
String.Contains()
或
Hashtable.ContainsKey()
复杂难道微软共享这些信息?
有什么方法可以知道.NET预定义方法的确切时间复杂度。就像如果我想知道的.NET BCL API或框架方法的时间复杂度
String.Contains()
或
Hashtable.ContainsKey()
复杂难道微软共享这些信息?
是的,在MSDN :)
此方法是O(1)的操作。
如果源的类型实现 ICollection的,则包含在 方法实现被调用,以获得 结果。否则,这个 方法确定源 是否包含指定的元素。
只要找到匹配元素 就终止枚举。
因此,对于字符串,它将是O(n)。
一种可能性是使用像Reflector这样的工具,并且自己查看方法的实现。然后,您应该能够确定大多数方法的复杂性(如果它们依赖于许多其他方法,则可以通过所有调用进行计算来追踪您的方式)。
我不认为有一个页面明确列出了所有方法的复杂性。
你可以使用Reflector和Code Metrics插件很容易地找到你自己。
反射器是一个显而易见的选择,可以在其他答案中突出显示所需的信息。但是,这不再是免费的工具,尽管不是太昂贵。
一个免费的替代方法是查看.NET框架库的源代码。 Scott Guthrie has a post它提供了一些信息和链接来访问和调试源代码。
有几篇文章提到了Reflector,这是一个很好的工具,但不再免费。提供类似服务的免费工具是ILSpy,值得一看,如果你不想购买反射器。
感谢您的信息。 – 2011-04-07 22:17:19