0
有人可以詳細說明這個函數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 R個2' ** ** IS兩個嵌套循環。而'k'就是列表的數量(測試數據) –
你確定這是'O(n^2 * k)'嗎?不是'O(n * k^2)'嗎? – Holt