float minwaitingtime(int *requesttimes,int *durations,int n)
float minwaitingtime(int
*requesttimes,int
*durations,int n)
for(i=0;iif(i==0) //第一次執行的時候,不用考慮作業的執行時間長短,直接把requesttimes[0]==0所對應的那個作業投入執行 &&requesttimes[0]==0}}
else //if(requesttimes[0]!=0)}}
flag[next]=1; //將最小執行時間那個作業置1,表示它被執行了
ctime=ctime+min; //此時系統時間加上最小的執行時間
min=500; //又要將min取到非常非常大以進入下一次迴圈
for(int
m=0;m
m++)}}
}for(i=0;ireturn totaltime/n; //返回平均等待時間
/*方法二:參考內容
int*flag=(int
*)malloc(n*sizeof(int)); //每個作業是否執行的標誌,若執行則置1
int*ready=(int
*)malloc(n*sizeof(int)); //還未執行,並且在當前時間前就已經就緒的作業(即處於等待狀態)
int ready_n=0; //還未執行並且已經處於等待狀態的作業數
int ctime=0; //當前時間
float wtime=0; //已執行作業的總等待時間
int current=0; //當前作業的序號
intnext=0; //下乙個進入處理的作業序號
int min=500; //最短的作業執行時間,開始的時候便取個很大的值
int i=0; //總迴圈變數
for(;i0
for(i=0;i//if(i==0&&requesttimes[0]!=0) ctime=requesttimes[0];
wtime=wtime+(ctime-requesttimes[current]); //已執行的總等待時間=上一次wtime+當前系統時間-作業開始時間
ctime=ctime+durations[current]; //目前的系統時間=上一次ctime+當前作業執行時間
flag[current]=1; //編號為current的作業執行了就將其標誌置1
ready_n=0;
for(int j=0;jif(flag[j]==0&&requesttimes[j]<=ctime)
}min=500;
for(int k=0;knext
}
current=next; //將下乙個任務賦給當前任務,進入下一次迴圈
}return wtime/n; //返回平均等待時間 */}
void main()
;//;//
int drtime=;//;//
int n=sizeof(retime)/sizeof(int);
float wt=minwaitingtime(retime,drtime,n);
printf("平均等待時間為:%f\n",wt);
}
字尾陣列(不完善)
前天在看字尾陣列相關的內容時,看了羅穗騫的 看了2天才基本看懂了 中的2倍增法。但是還是沒有理解完全。現在先做乙個筆記,以便以後參考。說實話,我覺得trie,p trie什麼的都沒這麼傷腦筋 以下是我在網上down的乙個示例程式。include include includeusing namesp...
演算法之遞迴(Java語言)待更不完善
遞迴初給我的印象是 哦,實現的這麼巧妙,量如此的少,嗯,看懂了。然後信心滿滿。下一次碰到個問題,心想 嗯,實現的優雅點,用遞迴,嗯,這樣寫,咦,到底迴圈到哪乙個子遞迴了,完,全暈。我不否認有的人很適合理解遞迴的思想,但有的人像我一樣可能就理解起來比較費勁,這並不否認也無需懷疑自己,因為據我所知,好多...
不完善的arp解決方案
背景 這邊 有兩條線連到校園網,給的都是校園網的ip。其中一條線介面壞了,線在地下,維修麻煩,找網路中心更麻煩,所以沒有弄。也就是說只有一條線,兩個ip。伺服器是自己做的ros,執行很穩定。問題 arp病毒爆發,所在的教學樓是乙個比較大的段,病毒滿天飛,總之一句話,arp攻擊,無處不在。反正一說我們...