關鍵路徑——C語言(理論)

關鍵路徑,是項目網絡中從起始事件到終止事件的最長路徑,決定了項目的最短完成時間。

關鍵路徑中的任務沒有任何可調整的余地,如果任何一個任務被延遲,整個項目的完成時間也會被延遲。

假設我們現在有一個圖:把圖的邊看作是活動,權值為活動的持續時間;圖的頂點看作是事件,事件是指在項目中發生的關鍵時間點沒有時間,即箭頭的頭是事件開始,箭頭末尾是事件完成。這就是所謂的AOE圖

在以前我們把邊看作是距離,在這里我們把邊看作是時間,即頂點到頂點所需的時間,那么接下來我們就要引出幾個概念:

事件的最早開始時間和最晚開始時間

????????我們假設頂點0是從時間為0時開始的,那么頂點1的最早開始時間為 6(因為需要經過時間為6的活動),頂點 2 為 4 ,頂點 3 為 5 。那么頂點 4 的最早起始時間是什么時候?因為要等活動全部進行完才可以進行下一個活動,所以頂點 4 的最早起始時間為 7,同樣對于頂點 8 來說,有多條路徑,但是要等前面所有活動都進行完,也就是取時間最長的,所以是(7+9+2)或者(7+7+4)路徑而不是走頂點0,3,5,7,這樣加起來是17<18。

所以事件(頂點)的最早開始時間為(從0到8):

0,6,4,5,7,7,16,14,18

????????接下來是最晚開始時間,最晚時間代表著在不延誤項目的情況下,最晚開始的時間。對于最后的事件 8 ,最晚開始時間就是最早開始時間(意思就是后面沒得可以做了,要立刻宣布項目的完成,所以最晚也是最早),所以事件 8 的最晚開始時間為 18。

????????反推前面的事件,事件 6 的最晚開始時間為 18-2=16,事件 7 的最晚開始時間為 18-4=14,事件 5 的最晚開始時間為 14-4=10,事件 4 的最晚開始時間為 16-9=7 或者 14-7=7,事件 3 的最晚開始時間為 10-2=8,事件 2 和事件 1 的最晚開始事件為7-1=6,那么事件0的最晚開始時間為多少?是6-6=0,6-4=2,還是8-5=3?考慮到不能延誤活動,應該是三個中最小的6-6=0。

所以事件的最晚開始時間為(從0到8):

0,6,6,8,7,10,16,14,18

當事件的最早開始時間和最晚開始時間相等時叫做關鍵事件,這代表著此事件是項目的關鍵項目,不可拖延。

活動的最早開始事件和最晚開始事件

????????對于活動來說,最早開始時間就是箭頭起始事件的最早開始時間,意味著這時已經可以開始進行活動了,所以對于ABC活動來說,最早開始時間都是0,D為6,E為4,F為5,那么GH的最早開始時間是多少?這里GH是事件4的最早開始事件,為7,以此類推。

最后,活動的最早開始時間,從(A到K):

0,0,0,6,4,5,7,7,7,16,14

????????最晚開始時間是箭頭的終止事件的最晚開始時間減去權值,意味著這時必須要開始進行活動了,否則會延誤,對于A來說,事件1的最晚開始時間為6,所以6-6=0,B,事件2的最晚開始時間為6,6-4=2,也就是說,B活動最晚要在時間為 2 的時候進行。以此類推。

最后,活動的最晚開始時間,從(A到K):

0,2,3,6,6,8,7,7,10,16,14

講完這兩個概念,才到文章的主題:關鍵路徑。

????????關鍵路徑是指活動的最早開始時間減去最晚開始時間為0的活動,也就是沒有時間余量。我們可以發現 ADGHJK 活動是最早開始時間等于最晚開始時間的,所以這就是關鍵路徑,如圖:

????????因為關鍵路徑是最短完成項目的事件,所以在優化項目的時候要著重優化這幾個活動,從而提高效率,這就是關鍵路徑的意義。

現在我們可以先思考一下代碼的過程:

1.拓撲排序,因為最早最晚時間要考慮前驅后繼(事件)

2.計算事件的最早最晚時間,根據是否相等確定關鍵路徑上的事件。

3.找出關鍵路徑

完整的代碼會在下一篇文章,希望對你有所幫助,如有錯誤歡迎指出。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38448.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38448.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38448.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

node編譯打包Error: error:0308010C:digital envelope routines::unsupported

問題描述&#xff1a; 報錯&#xff1a;Error: error:0308010C:digital envelope routines::unsupported 報錯原因&#xff1a; 主要是因為 nodeJs V17 版本發布了 OpenSSL3.0 對算法和秘鑰大小增加了更為嚴格的限制&#xff0c;nodeJs v17 之前版本沒影響&#xff0…

【CH32V305FBP6】USBD HS 虛擬串口分析

文章目錄 前言分析端點 0USBHS_UIS_TOKEN_OUT 端點 2USBHS_UIS_TOKEN_OUTUSBHS_UIS_TOKEN_IN 前言 虛擬串口&#xff0c;端口 3 單向上報&#xff0c;端口 2 雙向收發。 分析 端點 0 USBHS_UIS_TOKEN_OUT 設置串口參數&#xff1a; 判斷 USBHS_SetupReqCode CDC_SET_LIN…

玩轉HarmonyOS NEXT之配置文件篇

配置文件概述 本文以Stage模型為例&#xff0c;詳細介紹了HarmonyOS NEXT應用的各種配置文件&#xff0c;這些配置文件會向編譯工具、操作系統和應用市場提供應用的基本信息。 在基于Stage模型開發的應用項目代碼下&#xff0c;都存在一個app.json5的配置文件、以及一個或者多…

從零開始實現大語言模型(一):概述

1. 前言 大家好&#xff0c;我是何睿智。我現在在做大語言模型相關工作&#xff0c;我用業余時間寫一個專欄&#xff0c;給大家講講如何從零開始實現大語言模型。 從零開始實現大語言模型是了解其原理及領域大語言模型實現路徑的最好方法&#xff0c;沒有之一。已有研究證明&…

《昇思25天學習打卡營第07天|函數式自動微分》

函數式自動微分 環境配置 # 實驗環境已經預裝了mindspore2.2.14&#xff0c;如需更換mindspore版本&#xff0c;可更改下面mindspore的版本號 !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.14 import numpy as np imp…

Windows10錄屏,教你3個方法,簡單快速錄屏

“我的電腦系統是Windows10的系統&#xff0c;今晚要進行線上開會&#xff0c;但我實在有事沒辦法參加會議&#xff0c;想把會議的內容錄制下來方便我后續觀看。但卻找不到電腦錄屏功能在哪里打開&#xff1f;求助一下&#xff0c;誰能幫幫我&#xff1f;” 在數字化時代&…

mysql 命令 —— 查看表信息(show table status)

查詢表信息&#xff0c;如整個表的數據量大小、表的索引占用空間大小等 1、查詢某個庫下面的所有表信息&#xff1a; SHOW TABLE STATUS FROM your_database_name;2、查詢指定的表信息&#xff1a; SHOW TABLE STATUS LIKE your_table_name;如&#xff1a;Data_length 顯示表…

閑聊 .NET Standard

前言 有時候&#xff0c;我們從 Nuget 下載第三方包時&#xff0c;會看到這些包的依賴除了要求 .NET FrameWork、.NET Core 等的版本之外&#xff0c;還會要求 .NET Standard 的版本&#xff0c;比如這樣&#xff1a; 這個神秘的 .NET Standard 是什么呢&#xff1f; .NET St…

【算法】字母異位詞分組

題目&#xff1a;字母異位詞分組 給你一個字符串數組&#xff0c;請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。 字母異位詞 是由重新排列源單詞的所有字母得到的一個新單詞。 示例 1: 輸入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] …

從零開始搭建spring boot多模塊項目

一、搭建父級模塊 1、打開idea,選擇file–new–project 2、選擇Spring Initializr,選擇相關java版本,點擊“Next” 3、填寫父級模塊信息 選擇/填寫group、artifact、type、language、packaging(后面需要修改)、java version(后面需要修改成和第2步中版本一致)。點擊“…

【0300】Postgres內核動態哈希表實現機制(1)

相關文章&#xff1a; 【0299】Postgres內核之哈希表&#xff08;Hash Tables&#xff09; 0 概述 在【0299】Postgres內核之哈希表&#xff08;Hash Tables&#xff09;一文中&#xff0c;講解了哈希表的作用、實現、優缺點等特性。本文開始&#xff0c;將詳細分析Postgres內…

MySQL之應用層優化(三)

應用層優化 應用層緩存 2.本地共享內存緩存 這種緩存一般是中等大小(幾個GB)&#xff0c;快速&#xff0c;難以在多臺機器間同步。它們對小型的半靜態位數據比較合適。例如每個州的城市列表&#xff0c;分片數據存儲的分區函數(映射表)&#xff0c;或者使用存活時間(TTL)策略…

記錄一次Chrome瀏覽器自動排序ajax請求的JSON數據問題

文章目錄 1.前言2. 為什么會這樣&#xff1f;3.如何解決&#xff1f; 1.前言 作者作為新人入職的第一天&#xff0c;mentor給了一個維護公司運營平臺的小需求&#xff0c;具體需求是根據運營平臺的某個管理模塊所展示記錄的某些字段對展示記錄做排序。 第一步&#xff1a; myb…

工業觸摸一體機優化MES應用開發流程

工業觸摸一體機在現代工業生產中扮演著至關重要的角色&#xff0c;它集成了智能觸摸屏和工業計算機的功能&#xff0c;廣泛應用于各種生產場景中。而制造執行系統&#xff08;MES&#xff09;作為工業生產管理的重要工具&#xff0c;對于提高生產效率、降低成本、優化資源利用具…

力扣hot100-普通數組

文章目錄 題目&#xff1a;最大子數組和方法1 動態規劃方法2 題目&#xff1a;合并區間題解 題目&#xff1a;最大子數組和 原題鏈接&#xff1a;最大子數組和 方法1 動態規劃 public class T53 {//動態規劃public static int maxSubArray(int[] nums) {if (nums.length 0…

C++基礎知識-編譯相關

記錄C語言相關的基礎知識 1 C源碼到可執行文件的四個階段 預處理(.i)、編譯(.s)、匯編(.obj)、鏈接。 1.1 預處理 預處理階段&#xff0c;主要完成宏替換、文件展開、注釋刪除、條件編譯展開、添加行號和文件名標識&#xff0c;輸出.i/.ii預處理文件。 宏替換&#xff0c;…

【UML用戶指南】-26-對高級行為建模-狀態圖

目錄 1、概念 2、組成結構 3、一般用法 4、常用建模技術 4.1、對反應型對象建模 一個狀態圖顯示了一個狀態機。在為對象的生命期建模中 活動圖展示的是跨過不同的對象從活動到活動的控制流 狀態圖展示的是單個對象內從狀態到狀態的控制流。 在UML中&#xff0c;用狀態圖…

tcpdump命令詳解及使用實例

1、抓所有網卡數據包&#xff0c;保存到指定路徑 tcpdump -i any -w /oemdata/123.pcap&一、tcpdump簡介 tcpdump可以將網絡中傳送的數據包完全截獲下來提供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾&#xff0c;并提供and、or、not等邏輯語句來去掉無用的信…

【Python】已解決:SyntaxError: positional argument follows keyword argument

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例五、注意事項 已解決&#xff1a;SyntaxError: positional argument follows keyword argument 一、分析問題背景 在Python編程中&#xff0c;當我們在調用函數時混合使用位置參數&#xff08;p…

RabbitMQ進階篇

文章目錄 發送者的可靠性生產者重試機制實現生產者確認 MQ的可靠性數據持久化交換機持久化隊列持久化消息持久化 Lazy Queue(可配置~)控制臺配置Lazy模式代碼配置Lazy模式更新已有隊列為lazy模式 消費者的可靠性消費者確認機制失敗重試機制失敗處理策略 業務冪等性唯一消息ID業…