iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中关于时间复杂度的示例分析
  • 487
分享到

C语言中关于时间复杂度的示例分析

2023-06-26 04:06:31 487人浏览 独家记忆
摘要

本篇文章为大家展示了C语言中关于时间复杂度的示例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、时间复杂度1.什么是时间复杂度?空间效率,时间效率(较为关注)时间复杂度:算法中的操作执行次数,

本篇文章为大家展示了C语言中关于时间复杂度的示例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

    一、时间复杂度

    1.什么是时间复杂度?

    空间效率,时间效率(较为关注)

    时间复杂度:算法中的操作执行次数,为算法的时间复杂度。(不是具体时间,而是执行次数

    2.如何计算?

    时间复杂度

    (1)是一个估算,看表达式中影响大的那一项,如N*N+2N+10中,N*N对整个式子影响最大,故其时间复杂度为N*N,用大O的渐近表示法O(N*N)。

    (2)去掉时间表达式中的常数项乘积,例如,得到一个准确的时间表达式为2N+10,则估算得到的时间复杂度为O(N)

    (3)对于多个未知数时,例如时间表达式为N+M,假设M,N差不多大,则O(M)或O(N);假设M远大于N,则O(M)。

    (4)用常数1去替代所有确定的常数,如准确的时间表达式为100,O(1).

    (5)未知数和常数,滤去常数。

    (6)另外有些算法分为最好,最坏,平均这三种情况。当算法存在这三种情况时,选最坏的时间复杂度,例如假设字符串长度为N,“sdsfrsgtr...”,遍历字符串,求S的时间复杂度,最好O(1),最坏O(N),平均O(N/2)。

    A.  在冒泡排序中,

         第一趟冒泡:N

         第二趟冒泡:N-1

         第三趟冒泡:N-2

         第N趟冒泡:1

         为等差数列,准确次数为:        N*(N+1)/2

    冒泡排序时间复杂度为O(N*N)

    B.  在二分查找/折半查找中:

    假设二分了X次,有1*2*2....*2=N,2^X=N, X=(log2) N

    算法的复杂度计算中,喜欢省略成logN,因为不好写底数,但是写成lg N,是错的。

    C.  在某些阶乘的运算中求时间复杂度:

    long long Factorial(size_t N){   return N<2 ? N:Factorial(N-1)*N;}

    如Factorial(10),则返回factorial(9)*10,在返回到factorial(9)*8.....以此类推返回到

    factorial(1)*2返回到1.(实际是10!)递归了N次,故时间复杂度为O(N)。(特别注意:结返回结果是N!,但是操作的次数是递归了N次,所以时间复杂度为O(N))

    3.常见的时间复杂度:

    C语言中关于时间复杂度的示例分析C语言中关于时间复杂度的示例分析

     二、空间复杂度

    1.什么是空间复杂度?

    空间复杂度是算法运行过程中临时占用存储空间大小的量度,不在意其具体占了多少比特的大小,而是计算变量的个数。

    2.如何计算?

    对照时间复杂度的计算方法。注意:时间是累积的,空间是不累计的,空间可以销毁。

    例题1:消失的数字

    C语言中关于时间复杂度的示例分析

    思路1排序 0 1 2 3 4 5 6 7 9 一次比较,若下一个数与上一个数只差为1,则掠过,若下一个数比上一个数>1,则找到,但时间复杂度不符合。

    思路2:把0到N加到一起,结果ret1,再把数组中的数加到一起ret2,ret1-ret2就是要找的数。

    思路3:异或:相同为0,相异为1。将数组中的数与0-N数互相异或,最后剩下的那个数字就是缺的那个数。

    int missingNumber(int* nums, int numsSize){    int x=0;    //先和数组的数进行异或    for(int i=0;i<numsSize;++i)    {        x^=nums[i];    }    //在和0-N的数进行异或    for(int j=0;j<numsSize+1;++j)    {        x^=j;    }return x;}

    要注意0-N数异或时,注意j<numsSize+1,它比原数组中元素个数多1。

     例题2:旋转数组

    C语言中关于时间复杂度的示例分析

    思路1:保存最后一个数,将其挪到前面来。k次

    void rotate(int* nums, int numsSize, int k){    for(int i=0;i<k;++i)    {    int tmp=nums[numsSize -1];    for(int end=numsSize -2;end >=0;--end)    {        nums[end+1]=nums[end];    }    nums[0]=tmp;    }}

    但此时时间复杂度为O(N*K),跑不过~

    思路2:以空间换时间,尝试着多消耗一点空间,一次换成。将后K个保存,移到前面来,直接得到。时间复杂度为O(N),空间复杂度为O(N)

    思路3:后K个逆置,前K个逆置,整体逆置(这个实在是太牛了!!)

    C语言中关于时间复杂度的示例分析

     c代码为:

    //逆置void Reverse(int *nums ,int left,int right){    while(left<right)    {        int tmp=nums[left];        nums[left]=nums[right];        nums[right]=tmp;        ++left;        --right;    }}void rotate(int* nums, int numsSize, int k){    //控制好下标,后N-K个    Reverse(nums,numsSize-k,numsSize-1);    Reverse(nums,0,numsSize-k-1);    Reverse(nums,0,numsSize-1); }

     注意结果可能出错:

     此时需要注意K是否大于N,当K>N时需要取模:k%=numsSize

    添加:if(K>numsSize){ K%numsSize;}

    //逆置void Reverse(int *nums ,int left,int right){    while(left<right)    {        int tmp=nums[left];        nums[left]=nums[right];        nums[right]=tmp;        ++left;        --right;    }}void rotate(int* nums, int numsSize, int k){    if(k>numsSize)    {        k%=numsSize;    }    //控制好下标,后N-K个    Reverse(nums,numsSize-k,numsSize-1);    Reverse(nums,0,numsSize-k-1);    Reverse(nums,0,numsSize-1); }

    在力扣上运行得到:

    C语言中关于时间复杂度的示例分析

    上述内容就是C语言中关于时间复杂度的示例分析,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网其他教程频道。

    --结束END--

    本文标题: C语言中关于时间复杂度的示例分析

    本文链接: https://www.lsjlt.com/news/306654.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • C语言中关于时间复杂度的示例分析
      本篇文章为大家展示了C语言中关于时间复杂度的示例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、时间复杂度1.什么是时间复杂度?空间效率,时间效率(较为关注)时间复杂度:算法中的操作执行次数,...
      99+
      2023-06-26
    • C语言时间复杂度和空间复杂度实例分析
      今天小编给大家分享一下C语言时间复杂度和空间复杂度实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.时间复杂度:首先...
      99+
      2023-06-30
    • C语言时间复杂度与空间复杂度实例分析
      这篇文章主要介绍“C语言时间复杂度与空间复杂度实例分析”,在日常操作中,相信很多人在C语言时间复杂度与空间复杂度实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言时间复杂度与空间复杂度实例分析”的疑...
      99+
      2023-06-29
    • C语言关于时间复杂度详解
      目录一、时间复杂度1.什么是时间复杂度?2.如何计算?3.常见的时间复杂度: 二、空间复杂度1.什么是空间复杂度?2.如何计算?总结一、时间复杂度 1.什么是时间复杂度? ...
      99+
      2024-04-02
    • 分析 Go 语言中的时间复杂度和空间复杂度
      Go 语言是一种越来越流行的编程语言,它被设计成易于编写、易于阅读和易于维护的语言,同时也支持高级编程概念。时间复杂度和空间复杂度是算法和数据结构分析中重要的概念,它们衡量着一个程序的...
      99+
      2024-04-02
    • C语言数据结构的时间复杂度和空间复杂度实例分析
      这篇文章主要讲解了“C语言数据结构的时间复杂度和空间复杂度实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言数据结构的时间复杂度和空间复杂度实例分析”吧!一、数据结构前言 ...
      99+
      2023-07-06
    • C语言详细解析时间复杂度与空间复杂度
      目录一、概念1.1、算法效率1.2、时间复杂度1.3、空间复杂度二、计算2.1、大O的渐进表示法2.2、时间复杂度计算2.3、空间复杂度计算三、有复杂度要求的习题一、概念 1.1、算...
      99+
      2024-04-02
    • C语言数据结构时间复杂度及空间复杂度简要分析
      目录一、时间复杂度和空间复杂度是什么?1.1算法效率定义1.2时间复杂度概念1.3空间复杂度概念二、如何计算常见算法的时间复杂度和空间复杂度2.1时间复杂度计算2.2空间复杂度计算2...
      99+
      2024-04-02
    • Java 关于时间复杂度和空间复杂度的深度刨析
      目录1.算法效率2.时间复杂度2.1时间复杂度的概念2.2大O的渐进表示法2.3常见时间复杂度计算2.3.1常用的时间复杂度量级2.3.2常见示例举例2.3.2示例答案及分析3.空间...
      99+
      2024-04-02
    • C语言数据结构通关时间复杂度和空间复杂度
      目录一、时间复杂度:1.常数阶2.线性阶3.对数阶4.平方阶二、空间复杂度算法的时间复杂度和空间复杂度 一、时间复杂度: 首先,为什么会有这个概念的出现呢? 原来啊,在进行算法分析时...
      99+
      2024-04-02
    • C语言算法的时间复杂度和空间复杂度
      目录1.算法效率1.1 如何衡量一个算法的好坏1.2算法的复杂度2.时间复杂度2.1 时间复杂度的概念2.2 大O的渐进表示法2.3常见时间复杂度计算举例 3.空间复杂度4...
      99+
      2024-04-02
    • C语言三分钟精通时间复杂度与空间复杂度
      目录一、时间复杂度1)O(n)的含义2)复杂表达式的简化3)O(n)不一定优于O(n^2)​4)递归的时间复杂度二、空间复杂度1)O(1)空间复杂度​2)​​​​​​​O(n)空间复...
      99+
      2024-04-02
    • Java时间复杂度与空间复杂度实例分析
      本篇内容主要讲解“Java时间复杂度与空间复杂度实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java时间复杂度与空间复杂度实例分析”吧!一、算法效率算法效率分析分为两种:第一种是时间效...
      99+
      2023-06-29
    • 分析C++中红黑树的时间复杂度和空间复杂度
      红黑树是一种自平衡的二叉搜索树,它具有以下特点: 每个节点要么是红色,要么是黑色。 根节点是黑色。 每个叶子节点(NIL节点)是黑...
      99+
      2024-04-26
      C++
    • JavaScript时间复杂度和空间复杂度实例分析
      本篇内容主要讲解“JavaScript时间复杂度和空间复杂度实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript时间复杂度和空间复杂度实例分析”吧!前言时间复杂度和空间复杂...
      99+
      2023-07-02
    • C语言数据结构之算法的时间复杂度实例分析
      这篇文章主要讲解了“C语言数据结构之算法的时间复杂度实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言数据结构之算法的时间复杂度实例分析”吧!1、算法的复杂度算法在编写成可执行程序...
      99+
      2023-06-30
    • C语言中算法的时间复杂度和空间复杂度是什么
      这篇文章给大家分享的是有关C语言中算法的时间复杂度和空间复杂度是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.前言1.1 什么是数据结构?数据结构(Data Structure)是计算机存储、组织数据的方...
      99+
      2023-06-29
    • C语言数据结构与算法时间空间复杂度实例分析
      这篇文章主要介绍“C语言数据结构与算法时间空间复杂度实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言数据结构与算法时间空间复杂度实例分析”文章能帮助大家解决问题。时间复杂度来看第一个:l...
      99+
      2023-06-29
    • C语言数据结构的时间复杂度和空间复杂度
      目录一、数据结构前言        1.什么是数据结构:        2.什么是...
      99+
      2023-05-15
      C语言时间复杂度和空间复杂度 C语言时间复杂度 C语言空间复杂度
    • JavaScript时间和空间复杂度实例分析
      这篇文章主要讲解了“JavaScript时间和空间复杂度实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript时间和空间复杂度实例分析”...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作