# 时间复杂度和空间复杂度 通常不同的算法虽然结果一样但是消耗资源和时间却会有很大差别,衡量不同算法之间的优劣就要用到时间复杂度和空间复杂度 ## 时间复杂度 时间指运行算法所需要的时间,那我们运行用C# 程序看一下运行时间不得了,但是这个性能好的电脑和性能不好的电脑时间肯定是不同的。所以有了大O符号表示法T(n)=O(f(n)) 下面这个for循环运行需要 for (int i = 0; i < n; i++)需要一个单位时间 j = i;N次需要N个单位时间 j++;也是N次 所以时间复杂度为T(n)=(1+2n)*单位时间 简化为O(n) ```C# for (int i = 0; i < n; i++) { j = i; j++; } ``` ### 常见的时间复杂度量级 1. 常数阶O(1) 就是没有复杂循环结构 不管执行多少行几万十几万行都按O(1)算 ```C# j = i; j++; ``` 2. 线性阶O(n) 就是上面的for循环 消耗时间随着N变化而变化 ```C# for (int i = 0; i < n; i++) { j = i; j++; } ``` 3. 对数阶O(logN) 下面的循环就按i*2何时=N,就是2的多少次方是N,log2^N ```C# int i = 1; while(i pairs = new Dictionary(); foreach (var class2 in class2s) { pairs.Add(class2.Name, class2.Value); num3 += 1; } int sum3 = 0; foreach (var class1 in class1s) { if (pairs.ContainsKey(class1.Name)) sum3 += class1.Value + pairs[class1.Name]; num3 += 1; } DateTime time6 = DateTime.Now; Console.WriteLine($"写法三:总和为{sum3},循环{num3}次,耗时:{(time6 - time5).TotalMilliseconds}毫秒"); Console.ReadLine(); #endregion #endregion ``` ![ONDemo](../images/ONDemo.png) 源码地址: