請求處理問題 收藏

2021-05-05 00:32:03 字數 1738 閱讀 8275

問題描述:

說有一台機器,上面有m個儲存空間。然後有n個請求,第i個請求計算時需要佔r[i]個空間,儲存計算結果則需要佔據o[i]個空間(其中 o[i]題解:

假設可以滿足所有請求,並且處理請求的順序是:r1,r2,……r(n-1),r(n),那麼儲存完所有的請求結果後,剩餘的儲存空間為l= m-∑o[i]。

如果假設成立,必須滿足:針對請求r(n),一定有l+o[r(n)]>=r[r(n)]。同理,針對r(n-1),一定有

l+o[r(n)] + o[r(n-1)] >= r[r(n-1)],依次類推。於是,證明假設成立就轉化為:針對假設中的每乙個請求r(i),都有l+∑o[r(n-j)]>=r[r(i)],其中i>=j>=0。相應的,原問題也就轉化成從尋找這樣的r(i)。

既然如此,從尋找r(n)開始,這時候有n個選擇(r[1]~r[n]),那麼選擇哪乙個呢?如上所說,我們選擇的原則是滿足l+o[r(n)]>=r[r(n)],即l>=r[r(n)]-o[r(n)]。所以將所有的選擇按照r[r(n)]-o[r(n)]從小到大排序,每次選擇時試探r[r(n)]-o[r(n)]最小的值,如果最小值都不能滿足,那麼已經證明假設不成立,否則繼續探測n-1,n-2……1,直到出現不能滿足的情況,或者證明假設成立。

時間複雜度:nlogn(事先的排序)+n

view plaincopy to clipboardprint?

public class schedule ;  

static final int o=;  

static final int n = 8;  

static final int m = 50;  

static int index;  

public schedule()  

/** 

* part step of qusort 

*/ 

int part(int s,int e)  

return l;  

}  

/** 

* quick-sort 

*/ 

void qsort(int s,int e)  

}  

/** 

* sum o[0~n-1] 

*/ 

int sum()  

if(i == n)  

t.display();  

else 

system.out.println("cant be scheduled");  

}  

}  public class schedule ;

static final int o=;

static final int n = 8;

static final int m = 50;

static int index;

public schedule()

/*** part step of qusort

*/int part(int s,int e)

return l;

}/**

* quick-sort

*/void qsort(int s,int e)

}/**

* sum o[0~n-1]

*/int sum()

if(i == n)

t.display();

else

system.out.println("cant be scheduled");}}

下標處理問題

下標處理問題 主要是針對於插入排序演算法寫的程式,其他情況可以借鑑這些思路。數學上或者通常意義上,下標都是從1開始的,但是在多數程式語言裡面陣列下標都是從0開始的,這就很惱火了,簡單乙個下標處理起來卻異常麻煩!請看 例如 1 典型的陣列下標越界問題 假設有個陣列 a 0 a 1 我們要用插入法排序,...

ORACLE 異常處理問題處理

create or replace procedure pro people as begin select per id into v per id from people where id i id exception when no data found then v per id 1 whe...

應急處理問題思路

做資料庫時間長了,可能會經常去客戶那裡進行應急處理問題,特別是客戶急急忙忙的給你打 說資料庫執行很慢,甚至說資料庫無法使用了,讓你到客戶現場去解決問題,這個可能是大家最不想出現的,因為這個很急,到客戶現場需要趕緊解決問題,那麼如果你遇到了這個問題,也不要慌,還是按照自己的思路去解決,只不過要思路敏捷...