磁碟驅動排程問題 貪心

2022-09-11 05:03:15 字數 1292 閱讀 9091

題目:

輸入乙個請求序列:98,183,37,122,14,124,65,67

假設磁頭一開始的位置start處於c(c不在序列中的任何位置),例如c=53

如果採用最短尋道優先sstf,輸出序列的排程順序和磁頭移動總數

思路:首先sstf屬於作業系統的知識,表示每一次都找離當前位置最近的乙個磁軌去處理,根據這個定義就很自然地想到貪心

我把所有的序列按遞增排序,將start位置也排進去,這樣離當前位置最近的磁軌就是左邊下標最靠近他的元素或者右邊下標最靠近他的元素,兩者比較,取最小值,並作為下一次尋道的當前位置。

設定了乙個陣列flag,用來標記磁軌是否被訪問過,下標與儲存請求序列中的下標一一對應。

上**:

1 #include2 #include3 #include4 #include5

#define min_num(x,y) (x6

using

namespace

std;

7int

main() ;//

存放請求序列

9int sum = 0;//

磁頭移動總數

10int i = 0;//

i記錄a陣列的最後乙個元素下標

11do

while (getchar() != '\n'

);15

int start;//

磁頭起始位置

16 cin >>start;

17 a[i] =start;

18int flag[100] = ;//

被訪問過的標1

19 sort(a, a + i + 1);//

遞增排序

20int

j;21

for (j = 0; j <= i ; j++) 26}

27 vectorv;

28for (int k = 0; k < i; k++)

39else

if (flag[right] == 1

) 43

else

47 flag[j] = 1;48

v.push_back(a[j]);

49 sum +=min;50}

51 vector::iterator it;

52for (it = v.begin(); it != v.end(); it++)

55 cout <56 cout <5758

return0;

59 }

磁碟的驅動排程

一 磁碟的物理結構 二.磁碟的型別 對於磁碟,可以從不同的角度進行分類。最常見的有 將磁碟分成硬碟和軟盤 單片盤和多片盤 固定頭磁碟和活動頭 移動頭 磁碟等。下面僅對固定頭磁碟和移動頭磁碟做些介紹。1 固定頭磁碟。2 移動頭磁碟。柱面號,磁軌號,扇區號。假定以l,m,n 分別表示盤組的柱面數,盤面數...

貪心 加工生產排程(雙機排程貪心問題)

時間限制 1 sec 記憶體限制 64 mb 提交 41 解決 21 提交 狀態 討論版 命題人 外部匯入 題目描述 有n個部件需在a b機器上加工,每個工件都必須經過先a後b兩道工序。已知 部件i在a b機器上的加工時間分別為ai,bi。問 如何安排n個工件的加工順序,才能使得總加工時間最短?輸入...

貪心 任務排程問題

問題描述 假設給定n個任務的集合t,每個任務i有啟動時間si和完成時間fi si問題分析 要求 在最少的機器上安排完所有任務。如何選擇貪心策略才能使問題的解為最優解?顯然,開始時間最早的任務需要被先執行,但是最優解要求我們使用的機器最少,因此我們每次選擇時應盡量使用相同的機器。若已使用過的機器上現處...