1、设计一个试验,证明列表的索引操作为常数阶(涉及from __main__ import x;figure方法(创建图形对象);plt.plot;plt.xticks(my_x_ticks知识点)

1.设计一个试验,证明列表的索引操作为常数阶

from timeit import Timer
import random
import numpy as np
from matplotlib import pyplot as plt
a=[]
b=[]
#测x[200]这个代码性能
#"from __main__ import x"表示将x从__main__引入的timeit的计时命名空间
popzero=Timer("x[200]","from __main__ import x")#索引操作
for i in range(1000000,100000001,1000000):
    #          起点     终点       步长
    b.append(i)#横轴,一共,(100000001-1000000)/1000000个横坐标
    x=list(range(i)) #生成不同长度的列表
    w=popzero.timeit(1000) #执行1000次得到的总时间(每循环一次执行1000次)
    a.append(w)#时间作为纵坐标
#figure方法(创建图形对象):
#plt.figure(num=None,figsize=None,dpi=None,facecolor=None,edgecolor=None,frameon=True,**kwargs)
#           编号       大小       分辨率     背景颜色         边框颜色     是否显示边框
plt.figure(figsize=(100,20))
#传入x,y,通过plot画图,并设置折线颜色、透明度、样式、宽度、标记点、标记点大小、标记点边颜色、标记点边宽
#plt.plot(x,y,color='red',alpha=0.3,linestyle='-',linewidth=5,marker='0',markeredgecolor='r',markersize='20',markeredgewidth=10)
#x=np.arange(0,100,10)
#y=x**2
#plt.plot(x,y,linewidth='1',label='test',color='r',linestyle='--',marker='H')#H为六角标记
plt.plot(b,a,'r.-',linewidth=2,ms=5)
#横坐标从b[0]开始,到b[-1]结束,步长1000000
my_x_ticks=np.arange(b[0],b[-1],1000000)
plt.xticks(my_x_ticks)
plt.show()

 

2.设计一个实验,证明字典的取值操作和赋值操作为常数阶

from timeit import Timer
import random
import numpy as np
from matplotlib import pyplot as plt
x1=[]#用来存储x横坐标
y1=[]
y2=[]
#"from __main__ import x"表示将x从__main__引入的timeit的计时命名空间
popzero=Timer("x[200]","from __main__ import x") #索引操作
h=Timer("x[100]=-1","from __main__ import x") #赋值操作
for i in range(10000,1000001,20000):
    x1.append(i)#每次生成的字典的长度存储到x坐标中
    x={j:j for j in range(i)} #根据i生成新的字典
    w=popzero.timeit(1000) #执行得到字典的索引1000次的总时间
    n=h.timeit(1000)  #执行进行1000次赋值操作的总时间
    y1.append(w) #将每次索引的计算时间存储到y1中
    y2.append(n) #将每次赋值的计算时间存储到y1中
plt.figure(figsize=(100,20))
plt.plot(x1,y1,'r.-',linewidth=2,ms=5,label='索引')
plt.plot(x1,y2,'r.-',linewidth=2,ms=5,label='赋值')
my_x_ticks=np.arange(x1[0],x1[-1],2000)
plt.xticks(my_x_ticks)
plt.legend()#图标
plt.show()

 3、给定一个数字列表,其中的数字随机排列,编写一个线性阶算法,找出第k小的元素

def ksmal(list2,k):  #传入数字列表和k
    a=set(list2) #使用集合去除重复元素
    if k>len(a): #如果k大于集合的长度,则返回k太大
        print("k太大")
        return None
    else:
        b=list(a) #将集合转化为列表
        return sorted(b)[k-1] #对列表进行排序,找到第k小的元素

print(ksmal([33,44,666,442,689,75,98,21,55],4))#结果为55

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值