请教关于“平均时间复杂度T(n)”的推导

penluto 2003-12-09 09:23:56
刚开始学严蔚敏《数据结构(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平方))

谢谢高手!
...全文
190 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
abitz 2003-12-09
  • 打赏
  • 举报
回复
如果a中初始输入数据可能出现 n! 种的排列的概率相等
则if( a[j] > a[j+1] )句成立的概率为50%,
故内层循环执行次数为i/2。
在不考虑change的影响是有T(n)=(1+2+....+n-1)/(2*2) = (n-1)*n/4 = O(n^2)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧