zoukankan      html  css  js  c++  java
  • 时间复杂度及计算

     

    一般情况,算法中基本操作重复的次数是关于 问题规模n 的某个函数f(n)(频度)

    算法的时间量度记作T(n)=O(f(n)),即为时间复杂度

    简单来讲,计算时间复杂度,就是根据代码,将重复次数用一个含有 问题规模n 的代数式表示出来。

    ①O(1)

       ⭐ 如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。

         eg.    x=0;

                  for(i=0;i<1000;i++)

                       x+=i;


    ②O(n^a)

        eg1.   for(i=0;i<n;i++)

                   for(j=0;j<n;j++)

                         x+=1;

                  Σ(i=0—n)Σ(j=0—n)*1=n*n

         eg2.if ( A > B )

                { for ( i=0; i<N*N/100; i++ )

                    for ( j=N*N; j>i; j-- )

                         A += B; }

                else

               { for ( i=0; i<N*2; i++ )

                   for ( j=N*3; j>i; j-- )

                      A += B; }

              选取需要时间最长的那个循环,显然是if里面的     n^5

    、eg3.int func ( int n )

                { int i = 0, sum = 0;

                    while ( sum < n )

                         sum += ++i;

                   return i; }


    ③O(log an)

        eg.  for (int i = 1; i <= n; i *= c)

                        a = a + 1;

                 设频度f(n),则有  c^f(n)*1<=n,取等号时计算,得 f(n)=O(log cn)

                 同理,i执行 i/=c 的时候也是成立的:

                 for (int i = n; i > 0; i /= c) {
                       a = a + 1;}


    ④其它

        eg.for(i=0; i<n; i++)

                for(j=i; j>0; j/=2)

                    printf(“%d ”, j);


    下列函数中,哪个函数具有最慢的增长速度:B

    N​^1.5​​    NlogN​^2​​    N​^2​​logN      N(logN)​^2

    常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)


    另一种计算思想

    for (i=1;i<n;i++) 

             y=y+1; ① 
        for (j=0;j<=(2*n);j++) 
               x++; ② 

     语句1的频度是n-1
    语句2的频度是(n-1)*(2n+1)=2n2-n-1
    则f(n)=2n2-n-1+(n-1)=2n2-2;


    常用算法时间复杂度和空间复杂度

     图源网络

  • 相关阅读:
    30以后,程序员一定要转管理岗吗?
    C#调用Bartender打印绑定数据库,动态设置Sql
    记一次 加载大量数据时不影响界面UI的经历
    火狐浏览器安装印象笔记剪藏
    VS自定义模板-以自定义类模板为样例
    x86架构下win 系统下使用Vmware+ubantu+qemu 模拟arm64架构+Kylin系统
    ES6操作数组的7中方法
    Vue 动态绑定CSS样式
    C# 使用HtmlAgilityPack 抓取 网站链接
    elementui——表格的相同内容单元格合并
  • 原文地址:https://www.cnblogs.com/elegantcloud/p/13610610.html
Copyright © 2011-2022 走看看