python 数据结构 顺序表

顺序表

结构

python 数据结构 顺序表_第1张图片

图a是一体式结构,存储表信息与元素存储区信息安排在一块存储区里.
图b是分离式结构,表对象里只保存于整个表有关的信息(容量和元素个数),实际数据元素存放在另一个独立的元素存储区里.通过指针链接.

二者区别:
如果增加元素超过了列表的最大存储量时,则需要新建一个数据区.
一体式结构若想更换数据区,则要整体更改;而分离式结构则只需要更改表信息区中的数据区链接地址即可.即该顺序表对象不变.

顺序表扩充
1.线性扩充:每次扩充增加固定数目的存储位置,节省空间,操作次数多
2.倍数扩充:浪费空间,操作次数少,推荐.

数据区存储方式
python 数据结构 顺序表_第2张图片

图a是基本形式,每个元素所占的存储单元大小相同,元素下标是逻辑地址,而物理地址(内存地址)则可以使用指针的方式(起始位置+n*单元字节)访问.所以访问指定元素无需从头遍历,通过计算就可以得到相应地址,复杂度为O(1)

图b是元素外置形式,顺序表存储的是地址,这也保证了每个单元的大小相同.
图b也被称为对实际数据的索引.

python数据结构的例子
list和tuple两种类型采用了顺序表的实现技术
list是采用分离式结构,元素外置形式,倍数扩充的顺序表

list各种方法的复杂度

Operation Average Case Amortized Worst Case
Copy O(n) O(n)
Append[1] O(1) O(1)
Pop last O(1) O(1)
Pop intermediate O(k) O(k)
Insert O(n) O(n)
Get Item O(1) O(1)
Set Item O(1) O(1)
Delete Item O(n) O(n)
Iteration O(n) O(n)
Get Slice O(k) O(k)
Del Slice O(n) O(n)
Set Slice O(k+n) O(k+n)
Extend[1] O(k) O(k)
Sort O(n log n) O(n log n)
Multiply O(nk) O(nk)
x in s O(n)
min(s), max(s) O(n)
Get Length O(1) O(1)

dict各种方法的复杂度

Operation Average Case Amortized Worst Case
Copy[2] O(n) O(n)
Get Item O(1) O(n)
Set Item[1] O(1) O(n)
Delete Item O(1) O(n)
Iteration[2] O(n) O(n)

参考文献:
https://wiki.python.org/moin/TimeComplexity

你可能感兴趣的:(python-提高)