此代码在C语言中的最坏情况复杂性
此函数采用一个字符数组,表示卵石和 将数组重新排列为红色、白色和蓝色字符。 还将返回重新排列时进行的掉期数量。 如果输入合法且重新排列,则函数返回1 成功地如果在中发现非法字符,则返回0 输入此代码在C语言中的最坏情况复杂性,c,complexity-theory,C,Complexity Theory,此函数采用一个字符数组,表示卵石和 将数组重新排列为红色、白色和蓝色字符。 还将返回重新排列时进行的掉期数量。 如果输入合法且重新排列,则函数返回1 成功地如果在中发现非法字符,则返回0 输入 boolean processInput(char *pebbles, int *noOfSwaps){ int low; int mid; int high; *noOfSwaps = 0; low = 0; while (low < str
boolean processInput(char *pebbles, int *noOfSwaps){
int low;
int mid;
int high;
*noOfSwaps = 0;
low = 0;
while (low < strlen(pebbles) && color(*(pebbles + low)) == RED)
low++;
high = strlen(pebbles) - 1;
while (high >= 0 && color(*(pebbles + high)) == BLUE)
high--;
mid = low;
while (mid <= high){
if (color(*(pebbles + mid)) == RED){
if (mid == low){
low++;
mid++;
}
else{
swap((pebbles + mid), (pebbles + low));
(*noOfSwaps)++;
low++;
mid++;
}
}
else if (color(*(pebbles + mid)) == WHITE)
mid++;
else if (color(*(pebbles + mid)) == BLUE){
if (color(*(pebbles + high)) == BLUE)
high--;
else{
swap((pebbles + mid), (pebbles + high));
(*noOfSwaps)++;
high--;
}
}
else
return 0;
}
return 1;
}
布尔过程输入(char*pebbles,int*noOfSwaps){
int低;
int mid;
int高;
*noOfSwaps=0;
低=0;
而(低=0&&color(*(卵石+高))==蓝色)
高--;
中=低;
当所有鹅卵石都是红色时,(中间这条线将导致最小的O(n)+O(color())
。如果颜色是O(1)
(可能是),那么它就是O(n)
:
while(低
代码的其余部分似乎只检查每个元素的颜色一次,因此也就是O(n)+O(color())
所以我将使用O(n)
编辑:在while循环中调用strlen
。我将把它升级到O(n^2)
。其中n
是pebbles
的长度。使它返回到O(n)
。调用strlen()
一次,并缓存该值。如果希望有人回答,则应将代码张贴在堆栈溢出上。只需粘贴、选择并点击Ctrl+K。请在此处包含函数的相关文本。此外,您还应提供关于函数渐进复杂性的一些自己的估计。我的预测为O(n)粗略检查,它似乎是O(n),其中n=strlen(pebbles)。可能的重复-这是第四个相同副本粘贴的作业问题:好的,我感谢这个答案。你是否100%确定当前代码的最坏情况复杂性为O(n^2)…我肯定和kainaw有相同的想法,它是O(n)。请返回给我。如果数组都是红色的,那么我复制到答案中的两行代码将使用O(n^2)
。其余代码看起来是O(n)
strlen()
是一个O(n)
操作,当所有内容都是红色时,您将执行n
次。
while (low < strlen(pebbles) && color(pebbles[low]) == RED)
low++;