多工處理
阿新 • • 發佈:2020-12-27
技術標籤:Python演算法實戰演算法python人工智慧程式語言
Multitasking
多工處理
問題描述
給定一個任務列表和冷卻時間。在同一時刻可以同時處理多件任務,但是不能同時處理同一類任務。每一類任務處理完成後需要一定的冷卻時間後才能繼續處理同類的任務。演算法輸出按順序完成列表中給定任務所需的最短總時間。
測試樣例
# Input:
[1, 1, 2, 1, 3, 3, 1]
# Output:
12
# 執行順序為:
# 1 _ _ 1 2 _ 1 3 _ _ 3 1
# _ 表示冷卻時間,所以給定任務需要 12 個單位時間完成。
內容首發於微信公眾號IT資訊教室,如果您想學習更多AI相關的技能,歡迎搜尋關注或微信掃描下方二維碼關注~~
參考程式碼
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ---------------------
# O(n) time|O(k) space
# n為待處理的任務總數,k為不重複的任務總數。
# ---------------------
def TasksTime(tasks, coolDown):
currentTime = 0
lastPosition = {}
# 使用字典來儲存已經執行過的任務
# 字典的 key 是任務名稱,value 是任務最後一次執行的時間
# 當接下來要執行的任務已經存在與字典中時,判斷該任務是否已經超過冷卻時間
for task in tasks:
if task in lastPosition:
# 如果沒有超過冷卻時間,就更新當前時間為該任務最近執行時間+冷卻時間+1
# 即 將時間更新到冷卻結束可以繼續執行的時間
# 如果已經超過冷卻時間,那麼直接執行當前任務,並在字典中更新任務最後執行的時間
if currentTime - lastPosition[task] <= coolDown:
currentTime = lastPosition[ task] + coolDown + 1
lastPosition[task] = currentTime
currentTime += 1
return currentTime
# Test Program
tasks = [1, 1, 2, 1, 3, 3, 1]
coolDown = 2
print(TasksTime(tasks, coolDown))
# 12