設有n 個程式要存放在長度為l的磁帶上。程式i存放在磁帶上的長度是li, 1<= i<= n。這n 個程式的讀取概率分別是p1,p2,...,pn,且pi+p2+...+pn = 1。如果將這n 個程式按 i1,i2,....,in 的次序存放,則讀取程式ir 所需的時間tr=c*(pi1*li2+pi2*li2+...+pir*lir)。這n 個程式的平均讀取 時間為t1+t2+...+tn。 磁帶最優儲存問題要求確定這n 個程式在磁帶上的乙個儲存次序,使平均讀取時間達到 最小。試設計乙個解此問題的演算法,並分析演算法的正確性和計算複雜性。 程式設計任務: 對於給定的n個程式存放在磁帶上的長度和讀取概率,程式設計計算n個程式的最優儲存方 案。
輸入由檔案input.txt給出輸入資料。第一行是正整數n,表示檔案個數。接下來的n行中,
每行有2 個正整數a 和b,分別表示程式存放在磁帶上的長度和讀取概率。實際上第k個程
序的讀取概率ak/(a1+a2+...+an)。對所有輸入均假定c=1。
輸出:
輸出乙個實數,保留1位小數,表示計算出的最小平均讀取時間。
輸入樣例:
571 872
46 452
9 265
73 120
35 87
樣例輸出:
85.6193
#include #include #include using namespace std;int n;
struct nodep[1005];
bool cmp(node a,node b)
sort(p,p+n,cmp);
double t=0,tmp=0;
for(int i=0;it+=tmp;
}printf("%.4lf\n",t);
return 0;}/*
571 872
46 452
9 265
73 120
35 85
*/
磁碟最優儲存問題 貪心演算法
設有n 個程式要存放在長度為l的磁帶上。程式i存放在磁帶上的長度是li,1 i n。這n 個程式的讀取概率分別是p1,p2,pn,且pi p2 pn 1。如果將這n 個程式按 i1,i2,in 的次序存放,則讀取程式ir 所需的時間tr c pi1 li2 pi2 li2 pir lir 這n 個程...
貪心演算法解磁碟檔案最優儲存問題 演算法解題報告
設磁碟上有n個檔案f1,f2,fn,每個檔案占用磁碟上的1個磁軌。這n個檔案的檢索概率分別是p1,p2,pn,且 1。磁頭從當前磁軌移到被檢資訊磁軌所需的時間可用這2個磁軌之間的徑向距離來度量。如果檔案fi存放在第i道上,1 i n,則檢索這n個檔案的期望時間是對於所有的i 要求 輸入 第1行是正整...
貪心演算法 最優裝載問題
1 資料結構定義 double w n 一維陣列儲存古董的重量 2 按重量排序 sort w,w n 按古董重量公升序排序 3 按照貪心策略找最優解 首先用變數 ans 記錄已經裝載的古董個數,tmp 代表裝載到船上的古董的重量,兩個變 量都初始化為 0。然後按照重量從小到大排序,依次檢查每個古董,...