数据结构_事件复杂度的推导方法_推导O 阶

来源:互联网 发布:tinyumbrella官网 mac 编辑:程序博客网 时间:2024/05/21 03:56

推导大O阶方法:

             1. 用常数1取代运行时间中的所有加法常数

             2. 在修改后的运行次数函数中,只保留最高阶项

             3. 如果最高阶存在且不是1,则去除与这个项相乘的常数,得到的结果就是大O阶


时间复杂度的分类:

           1. 常数阶

#include <iostream>using namespace std;int main(){
      int n = 0;
      cin>>n;
      int sum = (1 + n)*n/2;//O(1)
      cout<<sum<<endl;      return 0;}
           2. 先性阶

#include <iostream>using namespace std;int main(){      for (int i = 0;i < 10; ++i)//O(n)      {            cout<<"i = "<<i<<endl;      }      return 0;}
           3. 对数阶
#include <iostream>using namespace std;int main(){        int count = 1;        while (count  < 20)        {                 count *=2;//O(logn)         }        return 0;}
           4.平方阶

for (int i = 0;i < 10; ++i){         for (int j = 0;j < 10; ++j)//O(n^2)         {                  ......;         }}


常见时间复杂度大小比较:
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)


特别提醒:

       递归虽然非常的简练,但是效率是非常低下的,不管是在时间复杂度还是空间复杂度(用户空间反复的开辟栈帧和释放栈帧)都非常的高。








0 0