顺序表的性能分析
在顺序表中,最常见的操作当然是查找(搜索),插入和删除了,现在对这三种操作的复杂度进行简要的分析。
第一,搜索:
顺序表的顺序搜索算法,它的主要内容就是从顺序表的第一项开始,根据要查找的给定值x,然后在顺序表中逐次进行比较。若相等,则搜索成功,返回它的所在位置。若遍历整个表,没有值与其相等,则返回搜索失败。
一般来说,搜索算法的复杂度是根据比较次数来决定的。简要分析,如果我们要找的值在第一个表项,那么它的比较次数就是1,当然要是在第二个表项,次数就为2,依次类推,在第n个表项,比较次数就为n。好了啦,现在我们可以计算它的平均比较次数了。假定每个表项的可能性都相等,那么我们有:
Acn=1/n*Σi=1/n*(1+2+.....+n)=1/n*n*(n+1)/2=(n+1)/2;
所以平均比较次数为(n+1)/2;
第二,插入:
顺序表的插入和删除算法复杂度与其表项循环内数据移动次数直接有关,先分析插入。我们知道,顺序表中如果要在某个位置插入一个元素,就必须把那个空出来,怎么空出来呢,其实就是把它以及它后面的元素向后移动一位。那么就是这样的,如果将新表项插入至第i个表项后面,可以从后向前循环,逐个向后移动n-i个表项。最好的情形就是在表尾追加新元素。那么它的移动次数为0,相反,最坏情形是在第一个表项位置插入。那么移动次数为n。来看平均移动次数。
Amn=1/(n+1)*Σ(n-i)=1/(n+1)*((n-1)+...+1+0)=(n)/2;
第三,删除:
在删除第i个表项时,是逐个移动n-i个表项。最好的情况是在删去最后的n个表项。次数为0,最坏情况是删除第一个表项。移动个数为n-1。那么平均移动个数:
Amn=1/n*Σ(n-i)=1/n*((n-1)+...+1+0)=(n-1)/2;
分析完毕!