第五章
详细介绍了动态数组的构造过程以及对其时间复杂度进行研究,深入探讨list不同情况下的效率。
本章练习偏向测试不同结构的时间效率,
代码粗糙,望大佬指出方便改进
def text1 ( n) :
import sys
l = [ ]
temp = 0
times = 0
for i in range ( n) :
size = sys. getsizeof( l)
if temp == size:
times += 1
else :
times = 0
temp = size
'''print('length{:4d} ,size{:4d}, repeat{:4d}'.format(
len(l), size, times))'''
if times == 0 and len ( l) :
print ( '每次更新数组的lenth:{:5d}' . format ( len ( l) - 1 ) )
l. append( None )
print ( '{:-^50}' . format ( 'cut' ) )
for i in range ( n) :
size = sys. getsizeof( l)
if temp == size:
times += 1
else :
times = 0
temp = size
'''print('length{:4d} ,size{:4d}, repeat{:4d}'.format(
len(l), size, times))'''
if times == 0 and len ( l) :
print ( '每次更新数组的lenth:{:5d}' . format ( len ( l) - 1 ) )
l. pop( )
'''改进DunamicArray'''
from TheCode. ch05. dynamic_array import DynamicArray
class Dynamic_array ( DynamicArray) :
def __getitem__ ( self, k) :
if k < 0 :
k = self. _n + k
if not 0 <= k < self. _n:
raise IndexError( 'invalid index' )
return self. _A[ k]
def insert ( self, k, value) :
if self. _n == self. _capacity:
temp = self. _make_array( 2 * self. _capacity)
self. _capacity *= 2
for i in range ( k) :
temp[ i] = self. _A[ i]
temp[ k] = value
for i in range ( k, self. _n) :
temp[ i + 1 ] = self. _A[ i]
self. _A = temp
else :
for i in range ( self. _n, k, - 1 ) :
self. _A[ i] = self. _A[ i - 1 ]
self. _A[ k] = value
self. _n += 1
def pop ( self, index= - 1 ) :
if index < 0 :
index = self. _n + index
if not 0 <= index < self. _n:
raise IndexError( 'invalid index' )
ret = self. _A[ index]
if self. _n < self. _capacity // 4 :
temp = self. _make_array( self. _capacity // 2 )
self. _capacity //= 2
for i in range ( index) :
temp[ i] = self. _n[ i]
if index != self. _n - 1 :
for i in range ( index + 1 , self. _n) :
temp[ i - 1 ] = self. _A[ i]