做為乙個演算法工程師,除了了解各種nn網路結構,調的一手好引數,傳統演算法這一部分也不能拉下。因此著手寫這個系列,一方面加深自己對演算法的理解,另一方面**在實際業務中的應用,畢竟ac不是目的,融匯貫通的應用才是真目標。問題:剛入職某網約車平台的l同學被安排了個任務,如下圖所示,在一塊區域有m個司機和n個乘客,考慮司機的接駕成本,司機只接距離三公里以內的乘客,以及乙個司機只能接乙個乘客,該如何匹配司機和乘客,使得被接上的乘客數最大?
對原問題進行轉換後,我們可以將上述問題轉換成如下圖所示的問題,若兩者司乘之間的距離小於三公里,則兩節點可由直線相連。該問題即二分圖最大匹配問題
在正式介紹演算法之前,我們首先介紹下二分圖問題:對於二分圖的最大匹配問題,可以用匈牙利演算法進行求解。
筆者刷數模題的時候有一道題考到了「二分圖最大權分配」,需要用到km演算法,但是書上對km演算法的介紹又臭又長,更何況有些同學「匈牙利演算法」也沒學過(由匈牙利數學家edmonds提出),自然難以理解所謂的km演算法。本文旨在用通俗易懂的語言,向讀者介紹匈牙利演算法和km演算法。
引入1.二分圖
2.增廣路
增廣路主要應用於匈牙利演算法中,用於求二分圖最大匹配。
km演算法用來求二分圖最大權完美匹配。這就是km演算法的整個過程,整體思路就是:每次都幫乙個頂點匹配最大權重邊,利用匈牙利演算法完成最大匹配,最終我們完成的就是最優匹配!
定義若p是圖g中一條連通兩個未匹配頂點的路徑,並且屬於m的邊和不屬於m的邊(即已匹配和待匹配的邊)在p上交替出現,則稱p為相對於m的一條增廣路徑(舉例來說,有a、b集合,增廣路由a中乙個點通向b中乙個點,再由b中這個點通向a中乙個點……交替進行)。
在正式介紹km演算法之前,我們先介紹匈牙利演算法。
演算法**
總結該演算法通常可用於平台型的網際網路,撮合交易的。如某滴,分配司機和訂單。來看就可以用km演算法實現價值最大化。
之後我們也可以通過公開的資料,來看看在網約車平台是如何實現分單的。
匈牙利演算法 KM演算法
匈牙利演算法 求最大匹配,那麼我們希望每乙個在左邊的點都盡量找到右邊的乙個點和它匹配。我們依次列舉左邊的點x的所有出邊指向的點y,若y之前沒有被匹配,那麼 x,y 就是一對合法的匹配,我們將匹配數加一,否則我們試圖給原來匹配y的x 重新找乙個匹配,如果x 匹配成功,那麼 x,y 就可以新增為一對合法...
匈牙利演算法,KM演算法
bool find int x return false 主程式 for i 1 i n i include include include include include include include include include include include include include...
2019 7 22 匈牙利演算法,KM演算法
這幾天知識點量太大,一時間不易吸收。先占個坑,慢慢填 分享一位博主dark scope的思路,簡單易懂還有趣,雖然是初學,也馬馬虎虎懂了個大概 define maxn 100000 int n,m n個男生 m個女生 二分圖 男生在左女生在右 bool line maxn maxn 兩者之間相互喜歡...