欢迎光临散文网 会员登陆 & 注册

磁盘调度SSTF(最短寻道时间优先算法)python

2023-06-07 14:29 作者:真是累的很啊  | 我要投稿

python相对于c/c++来说对于内存要求太高,它的运行速度也更慢,所以关于计算机底层算法还是用c/c++实现最好,用python最多是练习一下算法的逻辑,肯定是不能实际应用的



list1=list(map(int,input().split()))

list_seek=list(map(int,input().split()))
list_seek=sorted(list_seek)# 对数据排序,方便寻找离得最近的数
def Shortest_Seek(list_seek_sorted,track):
    for i in range(len(list_seek)): # 遍历尝试寻找离track最近的数
        if list_seek_sorted[i]>=track: # 寻找大于track的且最近的数(找到了说明这个数比track大且离得最近,这个数之前的那个数笔track小且离得最近)
            if i>=1: # 如果这个数不是列表中的第一个(如果是第一个说明左边没有比track小的数了,所以就没必要和左右两边的数比较了)
                if list_seek_sorted[i]-track>=track-list_seek_sorted[i-1]: #  左边的数离track近。这里注意>=,当两边一样距离的时候选择小的
                    next_track=list_seek_sorted.pop(i-1)
                    return next_track,list_seek_sorted
                else: #右边的数(也就是当前i所在位置的数)离track近
                    next_track=list_seek_sorted.pop(i)
                    return next_track,list_seek_sorted
            else: # 如果是第一个数就直接输出,因为左边没数了
                    next_track=list_seek_sorted.pop(i)
                    return next_track,list_seek_sorted
            break # 找到一个大于track且满足条件的数就退出循环
    else: # 如果遍历完还没有找到,说明track比所有数都大,所以输出列表中最后一个,因为它离track最近
        next_track=list_seek_sorted.pop(-1)
        return next_track,list_seek_sorted


# 初始化
result=0
now_track=list1[1] #初始磁头位置
next_track,list_seek=Shortest_Seek(list_seek,now_track)# 获取下一个要到达磁道位置
result+=abs(next_track-now_track) # 计算差值
now_track=next_track # 磁头移动至下一个磁道


# 循环获取最近的磁道,记录差值并移动
while list_seek:
    next_track,list_seek=Shortest_Seek(list_seek,now_track)
    result+=abs(next_track-now_track)
    now_track=next_track
print(result)




磁盘调度SSTF(最短寻道时间优先算法)python的评论 (共 条)

分享到微博请遵守国家法律