_Return_My_Offer_ 2023-07-24 21:56 采纳率: 100%
浏览 59
已结题

C语言初阶数据结构空间复杂度计算

img


希望有兄弟解释一下,为什么此处开辟的是一个二维数组,数组有n行,每行分别有1,2,3,...n列,所以是n(n + 1)/2个元素空间,空间复杂度为n^2

  • 写回答

4条回答 默认 最新

  • 关注
    int** s = (int**)malloc(n * sizeof(int*)); 
    //这一行代码申请了n个空间,用于保存n个地址(指针)
    
    while (n--) //执行n次循环
        s[n] = (int*)malloc(n * sizeof(int)); //每次循环申请n个空间,这里n递减
    
    //整个内存分配状态如下:
    /*
    1 2 3 4 ... n-1  n
    1 2 3 4 ... n-1
    ...
    1 2 3 4
    1 2 3
    1 2
    1
    */
    
    //所以,while循环总共申请的空间是 n * (n+1)/2,s就是一个不规则的二维数组
    
    //这块代码总共申请的内存空间是 n + n * (n+1)/2 ,空间复杂度一般只用最高次幂来表示,
    //所以,这段代码的空间复杂度就是n^2
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月3日
  • 已采纳回答 7月26日
  • 创建了问题 7月24日