请教关于“平均时间复杂度T(n)”的推导
刚开始学严蔚敏《数据结构(C语言版)》,请多指教:)
已知:(严蔚敏《数据结构(C语言版)》p.16)
对于一个bubble_sort(冒泡排序)函数:
void bubble_sort( int a[], int n) {
// 将a中整数序列重新排成自小至大有序的整数序列
for( i = n - 1, change = TURE; i >= 1 && change; --i ) {
change = FALSE;
for( j = 0; j < i; ++j )
if( a[j] > a[j+1] ) {
a[j]←→a[j+1]; // 关键语句
change = TRUE }
}
} // buuble_sort
其中的“关键语句”的执行次数与a数组初始数据集有关:
1)当a中初始序列为自小至大有序时,“关键语句”的执行次数为 0
2)当a中初始序列为自大至小有序时,“关键语句”的执行次数为 n(n-1)/2
即:
n-1
∑ i = (n-1) // 对应i=n-1
i=1
+(n-2) // 对应i=n-2
+...
+2 // 对应i=2
+1 // 对应i=1
= n(n-1)/2
问题:
今假设a中初始输入数据可能出现 n! 种的排列的概率相等,则“关键语句”的平均执行次数为多少?希望给出具体的推导过程!
(书上没给出具体答案,只写了平均时间复杂度T(n) = O(n平方))
谢谢高手!