誰かがこの関数の時間複雑さがどのようにしてO(n^2 * k)であるかを詳しく教えてください。 whileループ内のforループは、ほとんどk回実行されることを理解しています。しかし、私が理解していないのは、n^2項です。時間kの各リストから少なくとも1つの要素を含む要素の最小範囲の複雑度
void findSmallestRange(int arr[][N], int n, int k)
{
int i,minval,maxval,minrange,minel,maxel,flag,minind;
//initializing to 0 index;
for(i = 0;i <= k;i++)
ptr[i] = 0;
minrange = INT_MAX;
while(1)
{
// for mainting the index of list containing the minimum element
minind = -1;
minval = INT_MAX;
maxval = INT_MIN;
flag = 0;
//iterating over all the list
for(i = 0;i < k;i++)
{
// if every element of list[i] is traversed then break the loop
if(ptr[i] == n)
{
flag = 1;
break;
}
// find minimum value among all the list elements pointing by the ptr[] array
if(ptr[i] < n && arr[i][ptr[i]] < minval)
{
minind=i; // update the index of the list
minval=arr[i][ptr[i]];
}
// find maximum value among all the list elements pointing by the ptr[] array
if(ptr[i] < n && arr[i][ptr[i]] > maxval)
{
maxval = arr[i][ptr[i]];
}
}
//if any list exhaust we will not get any better answer ,so break the while loop
if(flag)
break;
ptr[minind]++;
//updating the minrange
if((maxval-minval) < minrange)
{
minel = minval;
maxel = maxval;
minrange = maxel - minel;
}
}
printf("The smallest range is [%d , %d]\n",minel,maxel);
}
'のn^2 '** ** 2つのネストされたループです。そして 'k'は単純にリストの数です(テストデータ) –
これは' O(n^2 * k) 'でしょうか?それは 'O(n * k^2)'ではないのですか? – Holt