題目描述
假設有乙個**排程機,有n個任務相同的任務需要排程到m臺伺服器上執行,由於每台伺服器的配置不一樣,因此,伺服器執行乙個任務所花費的時間也不同。現在假設第i個伺服器執行乙個任務需要的時間為t[i]。假如,有2個執行機a與b,執行乙個任務分別需要7min和10min,有6個任務待排程。如果平分這6個任務,即a與b各3個任務,則最短需要30min執行完所有。如果a分4個任務,b分2個任務,則最短28執行完。
請設計排程演算法,使得所有任務完成所需要的時間最短。
輸入m臺伺服器,每台機器處理乙個任務的時間為t[i],完成n個任務,輸出n個任務在m臺伺服器的分布。int estimate_process_time(int t,int m,int n)。
解題思路
可以採用貪心法來解決。
申請乙個陣列來記錄每台機器的執行時間,初始化為0。在排程任務的時候,對於每個任務,在選取機器的時候採用如下的貪心策略:對於每台機器,計算機器已經分配任務的執行時間+這個任務需要的時間,採用最短時間的機器進行處理。
實現**如下:
package interview;
public class taskscheduling ;
int n = 6;
int protime = calculate_process_time(t, n);
if (protime == null)
int totaltime = protime[0];
for (int i = 0; i < protime.length; i++)
system.out.println("執行完所有任務所需的時間為" + totaltime);
} }/**
* * @param t
* 每個伺服器處理的時間
* @param n
* 任務的個數
* @return 各個伺服器執行完任務所需的時間
*/private static int calculate_process_time(int t, int n)
int m = t.length;
int minindex;
int mintime;
int protime = new int[m];
for (int i = 0; i < n; i++)
}protime[minindex] += t[minindex];
} return protime;
}}
執行結果:
Spark 任務排程機制
driver執行緒主要是初始化sparkcontext物件,準備執行所需的上下文,然後一方面保持與的rpc連線,通過申請資源,另一方面根據使用者業務邏輯開始排程任務,將任務下發到已有的空閒executor上。executor程序起來後,會向driver反向註冊,註冊成功後保持與driver的心跳,同...
華為機試題 任務排程問題
作業系統任務排程問題。作業系統任務分為系統任務和使用者任務兩種。其中,系統任務的優先順序 50,使用者任務的優先順序 50且 255。優先順序大於255的為非法任務,應予以剔除。現有一任務佇列task,長度為n,task中的元素值表示任務的優先順序,數值越小,優先順序越 高。函式scheduler實...
問題 A 任務排程
題目描述 讀入任務排程序列,輸出n個任務適合的一種排程方式。輸入輸入包含多組測試資料。每組第一行輸入乙個整數n n 100000 表示有n個任務。接下來n行,每行第乙個表示前序任務,括號中的任務為若干個後序任務,表示只有在前序任務完成的情況下,後序任務才能開始。若後序為null則表示無後繼任務。輸出...