Java:这个算法的案例复杂度优、中、差是多少?

Java:这个算法的案例复杂度优、中、差是多少?,java,algorithm,complexity-theory,Java,Algorithm,Complexity Theory,我想知道这个算法的复杂性。在我的情况下,好的、中等的和最差的都在^2上 public char getModa(char[] a){ int ii[] =new int[a.length]; char[] t= new char[a.length]; for(int i=0;i<a.length;i++){ for(int j=0;j<a.length;j++){ if(a[j]==a[i]){ ii[i]++;

我想知道这个算法的复杂性。在我的情况下,好的、中等的和最差的都在^2上

public char getModa(char[] a){
   int ii[] =new int[a.length];
   char[] t= new char[a.length];

   for(int i=0;i<a.length;i++){
    for(int j=0;j<a.length;j++){
       if(a[j]==a[i]){ 
          ii[i]++;
          t[i]=a[j];
       }
     }
   }
   int cc=0;
   for(int i=0;i<ii.length;i++){
     if(ii[i]>ii[cc]) cc=i;
   }
   return a[cc];
 }

所有情况的复杂性最佳/平均/最差都在^2,瓶颈是在[0,a.length,[0,a.length]范围内对i,j的双重迭代

为了澄清为什么它确实在^2上,而不是人们可能认为的^3上-因为最后一个循环没有“嵌套”在瓶颈的一侧,所以3个循环的复杂性基本上在^2+n上,但由于在^2+n=在^2上,这就是答案


事实上,对于相同长度的数组,根本没有变化。无论输入的是什么,算法的迭代次数都是相同的。

for循环直接取决于数组a的长度

所以在所有的情况下都是这样


最后一个for循环不会影响程序的复杂性,因为它已经在*n

上。嵌套for循环中的代码运行a.length^2次,最后一个for循环中的代码运行ii.length=a.length次。因此,我们总共有a.length^2+a.length次迭代,结果是Oa.length^2

迭代次数,同样地,复杂性只取决于a的大小,而不取决于其中的值。因此,在最佳和最坏情况下都是相同的。

您的复杂性取决于^2


如果使用哈希表,类似的问题可能会在复杂度上得到解决。

问题是什么?第一步:看看循环嵌套的深度我想知道这个算法的复杂度是优秀的、平均的还是最差的!@MrSmith42他写道,他在^2上考虑循环迭代的次数不仅仅取决于数据的大小。Wh你指的是好的、中等的和最差的吗?@Andremoniy:听起来好像用户1960978不确定。所以仍然有一个问题,具体的问题是什么。