什么是最坏情况时间复杂度t(n): - 我正在读这本关于算法的书,并作为一个例子 如何获得T(n)....就像选择排序算法
就像我正在处理selectionSort(A [0..n-1])
一样//sorts a given array by selection sort
//input: An array A[0..n - 1] of orderable elements.
//output: Array A[0..n-1] sorted in ascending order
让我写一个伪代码
for i <----0 to n-2 do
min<--i
for j<--i+1 to n-1 do
ifA[j]<A[min] min <--j
swap A[i] and A[min]
--------我也会在C#中写它---------------
private int[] a = new int[100];
// number of elements in array
private int x;
// Selection Sort Algorithm
public void sortArray()
{
int i, j;
int min, temp;
for( i = 0; i < x-1; i++ )
{
min = i;
for( j = i+1; j < x; j++ )
{
if( a[j] < a[min] )
{
min = j;
}
}
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
}
==================
现在如何获得t(n)或已知的最坏情况时间复杂度
答案 0 :(得分:13)
那将是O(n ^ 2)。
原因是你有一个for循环嵌套在另一个for循环中。内部for循环的运行时间O(n)发生在外部for循环的每次迭代中,也是O(n)。这些中的每一个单独为O(n)的原因是因为它们在给定输入的大小的情况下花费线性时间量。输入越大,线性刻度所需的时间越长,n。
计算数学,在这种情况下是微不足道的,只需要通过外部循环的复杂性来复制内部循环的复杂性。 n * n = n ^ 2。因为记住,对于外循环中的每个n,你必须再次为内部做n。澄清:每个n次n次。
O(n * n)。
为O(n ^ 2)
答案 1 :(得分:3)
顺便说一句,你不应该混淆复杂性(用big-O表示)和T函数。 T函数是算法在给定输入时必须经过的步数。
因此,T(n)的值是实际的步数,而O(某物)表示复杂性。通过传统的符号滥用,T(n)= O(f(n))意味着函数T(n)与另一个函数f(n)具有至多相同的复杂度,这通常是最简单的函数其复杂性等级。
这很有用,因为它可以让我们专注于全局:我们现在可以通过查看它们“从长远来看”的执行方式,轻松地比较两种可能具有非常不同的T(n)函数的算法。 / p>
答案 2 :(得分:1)
@ sara jons The slide set that you've referenced - and the algorithm therein
正在测量for循环中每个原语/原子操作的复杂性
for(j=0 ; j<n ; j++)
{
//...
}
幻灯片将此循环评为2n + 2,原因如下:
其次,for循环中的比较
if(STudID == A[j])
return true;
这被评为n ops。因此,如果加上+1 op,n ops,n ops,+ 1 op,n ops = 3n + 2复杂度,结果就是如此。所以T(n)= 3n + 2
认识到T(n)与O(n)不同。
答案 3 :(得分:1)
这里有另一个博士学位闪回。
首先,T函数只是算法执行任务所花费的时间量(通常在一些步骤中,其中更多是以下)。什么是“步骤”,在某种程度上由使用定义;例如,通常计算排序算法中的比较次数,但搜索算法中搜索的元素数量。
当我们谈论算法的最坏情况时,我们通常用“big-O表示法”来表达。因此,例如,您听到冒泡排序需要O(n²)时间。当我们使用大O表示法时,我们真正说的是某些函数的增长 - 在这种情况下为T - 并不比其他函数的增长快一个常数。那是
T(n)= O(n²)
表示任何 n ,无论多大,都有一个 T(n)≤kn²的常数 k 。这里有点困惑的一点是我们以重载的方式使用“=”符号:它并不意味着数字意义上的两个相等,只是我们说的是< em> T(n) 以kn²为界。
在扩展问题的示例中,看起来他们正在计算for循环和测试中的比较次数;能够看到他们正在回答的背景和问题是有帮助的。但无论如何,它表明了我们为什么喜欢big-O表示法: W(n)这里是 O(n)。 (证明:存在一个常数k,即5, W(n)≤k(3n)+2。它遵循 O(n)的定义。)
如果您想了解更多相关信息,请参阅任何好的算法文本,例如,Introduction to Algorithms,Cormen 等。
答案 4 :(得分:0)
编写伪代码以从哈希表中搜索,插入和删除学生信息。计算最佳和最差情况时间复杂度
答案 5 :(得分:0)
3n + 2是正确的答案。在循环的每个步骤中,完成3个原子操作。 j ++实际上是两个操作,而不是一个。和j