美文网首页
分析add() 函数的时间复杂度

分析add() 函数的时间复杂度

作者: 安森老叔叔 | 来源:发表于2020-04-24 00:35 被阅读0次

// 全局变量,大小为10的数组array,长度len,下标i。
int array[] = new int[10]; 
int len = 10;
int i = 0;

// 往数组中添加一个元素
void add(int element) {
   if (i >= len) { // 数组空间不够了
     // 重新申请一个2倍大小的数组空间
     int new_array[] = new int[len*2];
     // 把原来array数组中的数据依次copy到new_array
     for (int j = 0; j < len; ++j) {
       new_array[j] = array[j];
     }
     // new_array复制给array,array现在大小就是2倍len了
     array = new_array;
     len = 2 * len;
   }
   // 将element放到下标为i的位置,下标i加一
   array[i] = element;
   ++i;
}

当i < len时, 即 i = 0,1,2,...,n-1的时候,for循环不走,所以这n次的时间复杂度都是O(1);
当i >= len时, 即 i = n的时候,for循环进行数组的copy,所以只有这1次的时间复杂度是O(n);
由此可知:
该算法的最好情况时间复杂度(best case time complexity)为O(1);
最坏情况时间复杂度(worst case time complexity)为O(n);
平均情况时间复杂度(average case time complexity),
第一种计算方式: (1+1+...+1+n)/(n+1) = 2n/(n+1) 【注: 式子中1+1+...+1中有n个1】,所以平均复杂度为O(1);
第二种计算方式(加权平均法,又称期望): 1(1/n+1)+1(1/n+1)+...+1(1/n+1)+n(1/(n+1))=1,所以加权平均时间复杂度为O(1);
第三种计算方式(均摊时间复杂度): 前n个操作复杂度都是O(1),第n+1次操作的复杂度是O(n),所以把最后一次的复杂度分摊到前n次上,那么均摊下来每次操作的复杂度为O(1)

相关文章

  • 分析add() 函数的时间复杂度

    当i < len时, 即 i = 0,1,2,...,n-1的时候,for循环不走,所以这n次的时间复杂度都是O(...

  • iOS集合类

    算法时间复杂度分析 时间复杂度通常用大 O 符号描述。定义了函数的极限特征,被用于描绘算法效率。O 定义了函数增长...

  • 【3】时间复杂度

    算法时间复杂度 算法时间复杂度的定义:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T...

  • 复杂度分析(时间)

    动态数组9 链表 动态数组add(E element)复杂度分析 均摊复杂度经过连续的多次复杂度比较低的情况后,出...

  • 时间复杂度&空间复杂度

    算法的时间复杂度和空间复杂度统称为算法的复杂度。 时间复杂度 时间复杂度实际上是一个函数,该函数计算的是执行基本操...

  • 针对封装数组的简单复杂度分析

    完成了数组的封装之后我们还需对其进行复杂度分析:此处的复杂度分析主要是指时间复杂度分析,算法的时间复杂度反映了程序...

  • 复杂度分析

    为什么需要复杂度分析? 大O复杂度表示法 时间复杂度分析 常见复杂度量级 复杂度量级简单说明 空间复杂度 时间复杂...

  • 2.1 递归

    Chapter2: 时间复杂度分析、递归、查找与排序 1. 递归 1. 什么是递归 表现: 在函数内部调用函数本身...

  • 一个好的算法如何测评

    一个算法的好坏可以根据复杂度分析来测评. 复杂度分析包括时间复杂度和空间复杂度. 1.时间复杂度 需要考虑: 1)...

  • map:169.求众数(投票算法)

    求众数 哈希Map 复杂度分析 时间复杂度:O(N) 空间复杂度: O(N) 投票算法 复杂度分析

网友评论

      本文标题:分析add() 函数的时间复杂度

      本文链接:https://www.haomeiwen.com/subject/zgptwhtx.html