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