最短作業優先演算法(不完善)

2021-07-22 06:00:18 字數 1973 閱讀 8821

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攻擊,無處不在。反正一說我們...