贪婪算法+小应用(调度问题)
【0】README
0.1) 本文總結于 數據結構與算法分析, 旨在 理解 “DFS應用——貪婪算法” 的idea;
【1】貪婪算法
1.1)已經看到的三個貪婪算法: Dijkstra算、Prim算法 和 Kruskal 算法;(Dijkstra 尋找一個頂點到其他頂點的最短路徑, Prim算法是選取頂點以找出最小生成樹, Kruskal算法是一次選取權值最小的邊 建立最小生成樹)
1.2)貪婪算法是分階段工作的 : 在每個階段,可以認為所做的決定是最好的, 而不考慮將來的后果。一般來說, 這意味著選擇的是某個局部的最優。
1.3)貪婪算法荔枝(使用最少數目的紙幣找零錢):
說找零錢, 大部分人首先數出面值1元的紙幣,然后是面值5角的紙幣、2角的紙幣、1角的紙幣等等;這種貪婪算法使用最少數目的紙幣找零錢;
貪婪算法的主要問題(添加1元2角的紙幣): 該算法不能總是成功,為了找還15角的零錢,如添加面值1元2角的紙幣(這僅僅是舉例說明)可破壞這種找零錢算法, 因為此時它給出的答案(一個面值1元2角的紙幣+1個面值2角的紙幣+一個面值1角的紙幣==3個)不是最優的(1個面值1元的紙幣+1個面值5角的紙幣==2個);
【2】一個簡單的調度問題
2.1)問題說明: 有作業 j1, j2, ……, jN, 已知對應的運行時間為 t1, t2, …, tN, 而處理器只有一個, 為了把作用平均完成的時間最小化,調度這些作業最好的方式是什么?
對上圖的分析(Analysis):
- A1)我們看到, 2號調度是按照最短的作業最先進行來安排的, 這將總會產生一個最優調度;
- A2)這個結果也指出了 為什么 os 調度程序一般吧優先權賦予給那些更短的作業的原因;
2.2)多處理器的情況 - 2.2.1)我們還是有作業 j1, j2, ……, jN,對應的運行時間為 t1, t2, …, tN,另外處理器的個數為P。不失一般性地, 我們將假設作業是有序的,最短的最先運行。
- 2.2.2)看個實際荔枝:
2.3)將最后完成時間最小化(即越早結束越好)
- 2.3.1)假設我們只關注最后作業的結束時間;
- 2.3.2)看個荔枝(下圖中的最小的最后完成時間是 34):
- 2.3.3)這個問題是NPC類問題, 因此將最后完成時間最小化顯然要比把 平均完成時間最小化困難得多;
總結
以上是生活随笔為你收集整理的贪婪算法+小应用(调度问题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux查看u盘(查看 linux u
- 下一篇: Huffman编码(Huffman树)