我是靠谱客的博主 冷酷犀牛,最近开发中收集的这篇文章主要介绍【时间复杂度练习题与解析】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、设n为如下程序段处理的数据个数,求时间复杂度

for(i=l;<n;i=2*i)

std::cout<<“i=”<<std::end1;

分析:

主看for循环,当>=n时结 束,假设执行m次结束,i1=2= 21 ,i2 =2*2 = 22,..,im二2m,则有2m=n,大致口算m=1og2n, 则时间复杂度为O( log2n )

2、分析以下时间复杂度

void fun(int n)
{
    int i=0,s=0;
    while(s<n)
    {
        ++i;
        s=s+i;
    }
}
分析:

n为规模,基本操作语句是++i和s=s+i,while循环处当s>=n不符合条件停止,假设执行m次结束,i=1,2,3..依次渐加,i只影响s值,主要看s, s1 =1, s2 =1+2=3, s3 =1+2+3=6,... sm =1+2+3+...+m=m(m+1)/2 ,正解答案中给出,m(m+1)/2+k=n (k起修正作用的常数),也可大致口算m≈ n−−√ ,则时间复杂度为O( n−−√ )

3、分析以下程序时间复杂度

void fun()

{

   int i=1,k=0,n=10;

   while(i<=n-1)

   {

       k+=10*i;

       ++i;

   }

}

分析:

显然看出可以改写为for(i=1;i<=n-1;++i) ,故时间复杂度为O(n)

4、设A是一个线性表(a_1 ....a_n)采用顺序存储结构,则在等概率的前提下,平均插入一个元素需要移动的元素个数是多少?若元素插入在a_i(1≤i≤n)所在位置处的概率为 n-i/n(n-1)/2​ ,则平均插入一个元素要移动的元素个数是多少?

分析:

(1):在a_1插入则要移动n次,a_2插入移动n-1次,...,a_n插入移动0次,总次数为0+1+2+...+n=n(n+1)/2 ,总共是0到n共1+n个 。则等概率下,平均插入一个元素移动的元素个数为[n(n+1)/2]/[1+n]=n/2

(2):将插入在a_i处插入概率用P表示,不难发现a_i处插入一个元素则需移动元素为n-i+1 ,可以以 {1,2,3,4,5}为例,在2处插入,5-2+1=4,故2,3,4,5四个元素往后移一位。则P概率下,平均插入一个元素移动的元素个数为 ∑P(n−i+1) = (2n+2)/3

5、假设n为2的乘幂,求以下时间复杂度

void counter()

{

    int n,x,count;

    std::cout<<"n:";

    std::cin>>n;

    count=0;

    x=2;

    while(x<n/2)

    {

        x=2*x;

        ++count;

    }

    std::cout<<count<<std::endl;

}

分析:

循环处x<n/2 ,所以对x进行观察,x= 22 , 23 ... 显然时间复杂度为O( log2n )

 

 

 

 

最后

以上就是冷酷犀牛为你收集整理的【时间复杂度练习题与解析】的全部内容,希望文章能够帮你解决【时间复杂度练习题与解析】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部