访问单向链表和顺序数组第i个元素的时间复杂度的分析
2012-10-22 22:45
363 查看
假设链表L有n个元素,如果这n个元素中每一个元素被访问的概率都为相同,则访问到第i个元素所前移的指针的平均次数为:
Average = (1+2+3+......+n)/n = n(1+n)/2/n = n/2 + 1/2
所以,访问第i个元素的平均时间为O(n)。相比起来,在数组L中访问第i个元素的平均时间为O(1)。
其他操作时间代价见下表:
Average = (1+2+3+......+n)/n = n(1+n)/2/n = n/2 + 1/2
所以,访问第i个元素的平均时间为O(n)。相比起来,在数组L中访问第i个元素的平均时间为O(1)。
其他操作时间代价见下表:
相关文章推荐
- 查找无序数组中的一个元素下标,并分析时间和空间复杂度, 考虑效率(很重要)
- 面试-链表逆置 作业手写一个单链表,并且实现单链表元素的逆置,(a0, a1,a2,a3,..an)-> (an,an-1,… a1, a0),算法的空间复杂度和时间复杂度经可能低
- 笔试题&面试题:设计一个复杂度为n的算法找到单向链表倒数第m个元素
- 给定一个单向链表(长度未知),请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素。实现这个算法,并为可能出现的特例情况安排好处理措施。“倒数第m个元素”是这样规定的:当m=0时,链表的
- 长度为n的整数数组,找出其中任意(n-1)个乘积最大的那一组,只能用乘法,不可 以用除法。要求对算法的时间复杂度和空间复杂度作出分析,可以写思路也可以写程序。
- 剑指offer 01-06解答思路以及代码(顺序数组找特定数字,替换空格字符,链表反转输出,重建二叉树,两个栈实现队列效果,旋转数组最小元素)
- 每天学习一算法系列(5)(已知两个数组,数组里的元素有正有负,但是都是按照从小到大已经排好序,要求用尽可能小的时间复杂度编写一算法求出两个数组的最大交集)
- C/C++ 数组,链表排序(平均时间复杂度 O(nlogn))归并、快速、堆、希尔之归并排序
- 随机查找数组中第i个元素(按顺序排列的)
- 长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为X的元素
- 用线性时间复杂度实现找出数组中出现一次的元素
- 《数据结构》2.10设计一个算法,删除顺序表中值为item的元素,要求算法的时间复杂度是O(n),空间复杂度是O(1)
- 笔试题&面试题:设计一个复杂度为n的算法找到单向链表倒数第m个元素
- 用线性时间复杂度实现找出数组中出现一次的元素
- 试设计一个算法,将数组A(0..n-1)中的元素循环右移k位,并要求空间复杂度为O(1),时间复杂度为O(n)。
- C++异常机制的实现方式和开销分析 (大图,编译器会为每个函数增加EHDL结构,组成一个单向链表,非常著名的“内存访问违例”出错对话框就是该机制的一种体现)
- 用线性时间复杂度实现找出数组中出现一次的元素
- 在o(1)时间复杂度删除链表元素
- 数据结构之 删除顺序表中所有元素为X 的元素,要求时间复杂度为O(n),空间复杂度为O(1)
- 用线性时间复杂度实现找出数组中出现一次的元素