排程問題1:晚了就不要

JN-avatar-img
發佈於計算機
更新 發佈閱讀 10 分鐘

前言

當主管突然交代一堆工作時,我們通常會先估算各項工作需要的時間,然後按部就班執行。但當主管為各項工作設定了 deadline,我們對於如何安排一個有效率的執行順序 (排程),往往百思不得其解。這類問題變化非常多,本篇文章將以其中一種常見的情境來分享解題思路。(即前文主管都不一定懂的工作排程技巧!序言中提到的第一集)


情境 - 晚了就不要

情境重點:

  • 每項工作一樣重要。
  • 主管只在意期限內完成的工作。
  • 逾期的工作就不要了,沒人在意。

目標:

找到一種排程 (schedule),讓按時完工的任務數量越多越好,來不及處理的任務就果斷放棄。

舉個例子:

7月1日!主管交代大家四項工作,擦窗、掃地、洗碗、送餐,並說明若期限內沒做完就算了,他會花錢請工讀生處理。四項工作的期限和處理時間如下圖。

vocus|新世代的創作平台

五位員工,收到任務後便開始在行事曆上規劃自己的 schedule。

vocus|新世代的創作平台

苦幹實幹的 JN,無腦地把四件事情依序排進行程表,即使逾期還是照做,大概是在想:沒有功勞也有苦勞。(醒醒吧...) 最後花了九天,只按時完成了擦窗和掃地兩件工作。

聰明機伶的阿金,看著 JN 的行程表暗笑他的迂。既然洗碗和送餐確定逾期,根本就不用排進去,阿金將行程表稍作優化,只花了五天,就按時完成了擦窗和掃地兩件工作。

時間很貴的小歐,看到大家都只完成兩件事,乾脆將最輕鬆的送餐和掃地排進行程表,如此便只需要短短三天就能做完兩件工作,其他時間他要請假看房發大財。

悟性極高的大A,在紙上窮舉各種排列組合,最終找到一種期限內完成三件工作的排法,考績直接吊打所有人!開心之餘,還在中間排了一天空檔出去上課。

運籌帷幄的老G...應該不用我多說了吧!部門中總是有這麼一位,辦事迅速、聰明可靠的同仁,羽扇綸巾,談笑間,強虜灰飛煙滅,倏地排好了行程。在高效處理完三件工作後,打算來個小旅行。

這個例子,完成三件工作就是最佳解了,先恭喜大A、老G 今年考績得第一!

看到這麼簡單的例子,也許你開始後悔,浪費十分鐘看這種低能問題,那很棒,表示你頭腦靈活。但當工作數量不是 4 而是 40,甚至 400 呢?該排入哪些工作?哪些工作又該被果斷放棄?這是不是就成了一個很燒腦的問題呢。

如果你有這種困擾,

或是會造成這種困擾的主管,

真心推薦繼續看下去,

給自己一個...

成為老G 的機會


解題思路

提醒,繼續往下看前,可以先睡個覺...

一、簡化問題

由上述例子我們知道,這種問題可能不是唯一解,所以我們只要像大A 或老G 一樣,找出其中一種解即可。

先不考慮工作之間的排假,要排最後再排就好。我們來觀察大A 和老G 兩人的 schedule,可以發現一個特性...

vocus|新世代的創作平台

「在最佳的 schedule 中,兩個相鄰的工作 U 與工作 V, 若先做 U 但 U 的期限較晚 (意即,後做 V 但 V 的期限較早),則 U 與 V 對調位置之後,仍是一個最佳 schedule。」

以上圖來說,工作 U 可想成洗碗,工作 V 可想成掃地,在老G 的行程表中,洗碗與掃地相鄰,且 先做洗碗但洗碗的期限較晚,後做掃地但掃地的期限較早,因此若將洗碗和掃地對調,仍然還是一個最佳排程。

任何一個最佳排程,都能基於這個特性,不斷地將相鄰的工作對調,最終將能使排程中的工作順序期限順序相同。

因此,這題最初的目標:

找到一種 schedule,讓按時完工的任務數量越多越好,來不及處理的任務就果斷放棄。

可以簡化為:

找到一種按照工作期限順序的 schedule,讓按時完工的任務數量越多越好,來不及處理的任務就果斷放棄。

二、排程方法

由簡化後的目標可知,我們要找的排程 (schedule),上面的工作順序要跟期限順序相同。那麼解法就能簡單分成三個步驟:

  1. 將所有工作按 deadline 早晚排序
  2. 依序將排序好的工作,一次一個排入行程表
  3. 若排入的工作逾期,就從行程表中刪掉耗時最長的工作

一樣用上面的例子來演示

vocus|新世代的創作平台

第一步,將所有工作按 deadline 排序為:

  1. 送餐 (7/3)
  2. 擦窗 (7/4)
  3. 掃地 (7/7)
  4. 洗碗 (7/8)

第二步、第三步一起做。依序將排序好的工作,一次一個排入行程表。若排入的工作逾期,就從行程表中刪掉耗時最長的工作。

排入第一個工作,送餐,沒有逾期。

vocus|新世代的創作平台

排入第二個工作,擦窗,逾期了。

vocus|新世代的創作平台

逾期了,那就刪掉行程表中最耗時的工作,剛好也是擦窗。

vocus|新世代的創作平台

排入第三個工作,掃地,沒有逾期。

vocus|新世代的創作平台

排入第四個工作,洗碗,沒有逾期。

vocus|新世代的創作平台

四個工作都排完,最佳的排程就完成了!放棄擦窗,依序做了餐、地、碗,三件工作。(需要在工作間請假的,可以輕鬆地以相反的順序洗、掃、送,以不造成逾期的前提下去規劃。)

話說,

不幸地(?),這個解跟大A 的一樣,而不是老G...,說好給自己一個成為老G 的機會,怎麼變大A 了?

因為我寫完文才發現圖畫反了= =

其實不用太在意,兩者都是最佳解...


結論

記重點就好,不論多少工作,只要符合本文 晚了就不要了 的情境,就能照這三個步驟:

  1. 將所有工作按 deadline 早晚排序
  2. 依序將排序好的工作,一次一個排入行程表
  3. 若排入的工作逾期,就從行程表中刪掉耗時最長的工作

找到最佳解。


附件

附上程式碼給有興趣的人參考,

但還沒 debug,有發現問題可以留言叫我修,或一起討論,教學相長!

schedule_case1.py

import datetime
import heapq

TODAY = '2023-07-01'
TASKS = [
('Clean Windows', 3, '2023-07-04'), # (task_name, days, deadline)
('Sweep Floor', 2, '2023-07-07'),
('Wash Dishes', 3, '2023-07-08'),
('Deliver Food', 1, '2023-07-03'),
]

# preprocess
today = datetime.date.fromisoformat(TODAY)
tasks = [(t[0], t[1], datetime.date.fromisoformat(t[2])) for t in TASKS]

# step 1, sort by deadline
tasks.sort(key=lambda task: task[2])

# step 2 and 3
schedule = []
begin_date = today + datetime.timedelta(days=1)

for task in tasks:
heapq.heappush(schedule, (-task[1], task))
begin_date += datetime.timedelta(days=task[1])
print('Add: ', task[0])

if (begin_date - datetime.timedelta(days=1) > task[2]):
removed_task = heapq.heappop(schedule)
begin_date = begin_date - datetime.timedelta(days=task[1])
print('Remove:', task[0])

# print schedule
begin_date = today + datetime.timedelta(days=1)
schedule.sort(key=lambda t: t[1][2])
print('My schedule:')
for task in schedule:
print(begin_date, 'start to:', task[1][0])
begin_date += datetime.timedelta(days=task[1][1])

執行結果 (理論上跟本文演示的例子會一樣)

$ python schedule_case1.py
Add: Deliver Food
Add: Clean Windows
Remove: Clean Windows
Add: Sweep Floor
Add: Wash Dishes
My schedule:
2023-07-02 start to: Deliver Food
2023-07-03 start to: Sweep Floor
2023-07-05 start to: Wash Dishes


留言
avatar-img
JN的沙龍
64會員
38內容數
個人網誌啦~ 內容包含但不限於學習筆記、心情抒發、火星廢文...
JN的沙龍的其他內容
2025/01/17
某天,某島國上的花生農老G,因為體力漸衰、氣候異常、地緣政治...等因素,種出的花生品質越來越不穩定,於是邀了其他島上的A格斯先生、高手B爾、阿國兄,四人一起組了個互助會...
Thumbnail
2025/01/17
某天,某島國上的花生農老G,因為體力漸衰、氣候異常、地緣政治...等因素,種出的花生品質越來越不穩定,於是邀了其他島上的A格斯先生、高手B爾、阿國兄,四人一起組了個互助會...
Thumbnail
2025/01/13
下圖為程式碼節錄 把 output 印出來看,會發現有五組數字,每一組數字依序對應到驗證碼圖片
Thumbnail
2025/01/13
下圖為程式碼節錄 把 output 印出來看,會發現有五組數字,每一組數字依序對應到驗證碼圖片
Thumbnail
2025/01/13
資料集有了,模型兜好了,再來可以開始訓練了。 首先準備 train.py,下圖僅節錄部分程式碼。 圖中包含了大部分的程式和註解,整段 code 也幾乎是公版了,建議簡單看過再自己融會貫通,有問題可以根據執行時的 error log 去解決,也可以留言討論。 此時資料夾應該長這樣
Thumbnail
2025/01/13
資料集有了,模型兜好了,再來可以開始訓練了。 首先準備 train.py,下圖僅節錄部分程式碼。 圖中包含了大部分的程式和註解,整段 code 也幾乎是公版了,建議簡單看過再自己融會貫通,有問題可以根據執行時的 error log 去解決,也可以留言討論。 此時資料夾應該長這樣
Thumbnail
看更多
你可能也想看
Thumbnail
「沒有計畫,就沒有計畫失敗。」 沒有規劃時間也是。 剛開始要時間管理,一定會找一個行事曆app 一開始很熱情,把它排的滿滿的。 覺得自己就是一位時間管理大師。(我說我 然後發現中間沒空檔不行。 你會去上廁所,你會有突發狀況。 剛開始的我就是這麼安排的。 你會發現,開始跟不上,開始趕行程。 忙了一整天
Thumbnail
「沒有計畫,就沒有計畫失敗。」 沒有規劃時間也是。 剛開始要時間管理,一定會找一個行事曆app 一開始很熱情,把它排的滿滿的。 覺得自己就是一位時間管理大師。(我說我 然後發現中間沒空檔不行。 你會去上廁所,你會有突發狀況。 剛開始的我就是這麼安排的。 你會發現,開始跟不上,開始趕行程。 忙了一整天
Thumbnail
每天工作到深夜、假日加班,是許多人的生活和工作寫照。面對接踵而至的工作,只得把許多重要的、想做的、感興趣的事拋在一旁。 想解決「事情做不完」的困擾,根據《其實你做太多了!》一書作者費格斯.奧康奈爾(Fergus O'Connell)的分析,方法並不是挖出「更多時間」,而是「不要做那麼多事」,如此才能
Thumbnail
每天工作到深夜、假日加班,是許多人的生活和工作寫照。面對接踵而至的工作,只得把許多重要的、想做的、感興趣的事拋在一旁。 想解決「事情做不完」的困擾,根據《其實你做太多了!》一書作者費格斯.奧康奈爾(Fergus O'Connell)的分析,方法並不是挖出「更多時間」,而是「不要做那麼多事」,如此才能
Thumbnail
受眾:無法有效分配時間的人 ⁣⁣⁣⁣ ⁣⁣⁣難易度:🌟
Thumbnail
受眾:無法有效分配時間的人 ⁣⁣⁣⁣ ⁣⁣⁣難易度:🌟
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
在現代工作中,變動性是越來越高的 有一句話說:計劃趕不上變化,在現在的環境裡是越來越有感 不管今天是專案經理、一般工作者 我都覺得大家一定要『謀定而後動』 總結五步驟希望能對大家的工作效率、工作品質有所改善
Thumbnail
在現代工作中,變動性是越來越高的 有一句話說:計劃趕不上變化,在現在的環境裡是越來越有感 不管今天是專案經理、一般工作者 我都覺得大家一定要『謀定而後動』 總結五步驟希望能對大家的工作效率、工作品質有所改善
Thumbnail
好的待辦清單,能讓你掌控自己的工作時間,清楚知道需要先做什麼事,也能大幅減輕你的壓力,消除你因為專案落後而產生的沮喪感與內疚感。
Thumbnail
好的待辦清單,能讓你掌控自己的工作時間,清楚知道需要先做什麼事,也能大幅減輕你的壓力,消除你因為專案落後而產生的沮喪感與內疚感。
Thumbnail
時間,是上帝賜給每個人最公平的禮物,每一個人都有24小時,有的人可以同時完成多件事,有的人卻一事無成!我們不可能有時間去做好每一件事,但卻永遠能有足夠的時間做好「最重要的那件事」。
Thumbnail
時間,是上帝賜給每個人最公平的禮物,每一個人都有24小時,有的人可以同時完成多件事,有的人卻一事無成!我們不可能有時間去做好每一件事,但卻永遠能有足夠的時間做好「最重要的那件事」。
Thumbnail
最近畫圖畫到腦袋空空就來看本書(喂) 其實是手要廢了就休息看些有的沒的(ゝ∀・) 這時這本書吸引著我這個絲毫沒有效率可言的人的目光Σ( ° △ °) 10分鐘完成每件工作:讓你優秀的不是努力,而是方法 我大概一看標題就知道是將大任務分解小任務的內容,不過有點好奇這種大公司中工作的人的「思路」就是。
Thumbnail
最近畫圖畫到腦袋空空就來看本書(喂) 其實是手要廢了就休息看些有的沒的(ゝ∀・) 這時這本書吸引著我這個絲毫沒有效率可言的人的目光Σ( ° △ °) 10分鐘完成每件工作:讓你優秀的不是努力,而是方法 我大概一看標題就知道是將大任務分解小任務的內容,不過有點好奇這種大公司中工作的人的「思路」就是。
Thumbnail
看到本文的你,是不是正懶洋洋的滑著你手上的3c產品。又懶又想工作,哎唷~到底該做哪個?有這份疑慮的你,恭喜來對地方了! 以前假日,吃完早餐後便感到全身無力,軟趴趴的,很想倒在床上。但想起平日策劃過假日要做的事,像打掃、運動或工作,讓內心好掙扎。時間隨著我的猶豫一滴一點流逝,接著,一個上午就不見了!
Thumbnail
看到本文的你,是不是正懶洋洋的滑著你手上的3c產品。又懶又想工作,哎唷~到底該做哪個?有這份疑慮的你,恭喜來對地方了! 以前假日,吃完早餐後便感到全身無力,軟趴趴的,很想倒在床上。但想起平日策劃過假日要做的事,像打掃、運動或工作,讓內心好掙扎。時間隨著我的猶豫一滴一點流逝,接著,一個上午就不見了!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News