現(xiàn)金流問(wèn)題

假設(shè)有一些朋友之間互相具有債務(wù)關(guān)系,如果已知他們之間的欠款和借款金額,問(wèn)至少需要多少現(xiàn)金流才能解決它們之間的債務(wù)關(guān)系(所有借款都?xì)w還)。
例如,下圖表示三個(gè)朋友P0,P1,P2之間的債務(wù)關(guān)系,


cashFlow1.png

P0需要?dú)w還P1 1000,P0需要?dú)w還P2 2000,P1需要?dú)w還P2 5000,
如果直接按初始債務(wù)關(guān)系,需要1000+2000+5000=8000現(xiàn)金。

cashFlow2.png

使用上圖中(最佳)還款方案,則只需要3000+4000=7000現(xiàn)金。


解決方案

使用貪心方法,每一步都解決一個(gè)人的借債關(guān)系。如何選擇每一步要解決的債務(wù)關(guān)系人呢?挑選出凈借出和凈借入最大的兩個(gè)人,挑他們兩個(gè)中數(shù)值小的那個(gè),如果凈借出的值x相對(duì)較小,則將凈借入最大的人減去x;如果凈借入的值x相對(duì)較小,則將凈借出最大的人減去x。即從最大借入的人轉(zhuǎn)移x到最大借出的人。
算法的具體步驟如下:
設(shè)有n個(gè)人,P_i,其中i0n-1。

  1. 計(jì)算每個(gè)人的凈數(shù)量。P_i的凈數(shù)量等于所有借出的和減去所有借入的和。
  2. 找到兩個(gè)人:最大凈借出人(正最大)和最大凈借出人(負(fù)最大),分別為maxCredit和maxDebit。最大凈借入人為P_d,最大凈借出人為P_c。
  3. 設(shè)x為maxCredit和maxDebit中的小者,從P_d中消去x,從P_c中消去x。更新P_cP_d凈數(shù)量。
  4. x等于maxCredit,則P_c可以去除(債務(wù)已清0);若x等于maxDebit,則P_d可以去除。
  5. 對(duì)于剩下的n-1個(gè)人,重復(fù)上面2-4。
    算法的時(shí)間復(fù)雜度為O(n^2)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 窮盡手段打出綜合拳進(jìn)行全面辯護(hù) ——趙某某被控詐騙百萬(wàn)無(wú)罪案 承辦律師:徐宗新 承辦律師:孫立波 【案件概況】...
    楊昆刑事律師閱讀 1,942評(píng)論 0 1
  • 介紹我自己?我是誰(shuí)? 當(dāng)我自問(wèn),首先冒出的一個(gè)答案,居然是:我是一個(gè)九歲孩子的媽媽。 這個(gè)答案直接暴露了我目前以孩...
    看見藍(lán)天閱讀 340評(píng)論 9 7
  • 小時(shí)侯 家 門前的那棵梧桐樹 與朱自清筆下的背影 一樣 崇高 那時(shí)候 驚奇 是什么遮住了 磅礴的雨季 空中 寬大的...
    浦堂鄉(xiāng)人閱讀 276評(píng)論 3 2
  • 昨天,在新華路新西南巷的淘書公社里,從紅香圃老師的手里接過(guò)北京十月文藝出版社版的《平凡的世界》普及本,(...
    大唐炫月閱讀 12,612評(píng)論 4 5

友情鏈接更多精彩內(nèi)容