多人分帳怎麼結清?最少轉帳演算法教學
你已經記好每筆消費、換好幣別、算出誰欠誰。最後一步——實際結清——正是多數團體最浪費力氣的地方。十個人各自還「自己欠的那位」,可能生出幾十筆轉帳。有更好的做法:用最少的付款次數結清整團。
「各還各的」的問題
旅程結束後,每人有一個淨額——被欠為正、欠人為負。直覺是每個欠錢者直接還每個被欠者。對 n 人的團體,這最多會變成 O(n²) 筆付款,實際上是一團沒人能驗證的部分轉帳蜘蛛網。
最少轉帳結清,白話講
因為只有淨額重要,你可以全部互抵,用少得多的轉帳清掉債務。標準貪婪做法:
- 算出每人淨額(總墊付 − 總分攤)。
- 分成欠錢者(負)與被欠者(正)。
- 取最大欠款者與最大債權者:欠款者付兩者中較小的金額,其中一方歸零。
- 重複直到全部歸零。
對 n 人,這最多產生 n − 1 筆轉帳,通常更少。五個人三、四筆就結清,而非十幾筆。
實例:五個朋友
週末小旅行後的淨額:
- Ada:+NT$90(被欠)
- Bo:+NT$10(被欠)
- Cyr:NT$0(打平)
- Dee:−NT$40(欠)
- Eve:−NT$60(欠)
最大欠款者 Eve(−60)付最大債權者 Ada(+90)→ Ada 變 +30、Eve 結清。接著 Dee(−40)付 Ada(+30)→ Ada 結清、Dee 變 −10。最後 Dee(−10)付 Bo(+10)→ 雙雙結清。五個人、三筆轉帳,全團打平,沒有一毛錢白繞路。
這對團體旅行為何重要
- 摩擦更少。轉帳越少,付款 App 的請求越少、「你轉了嗎」的訊息越少。
- 可驗證。一份簡短的轉帳清單容易核對;成對付款的蜘蛛網則不行。
- 幣別乾淨。跨多幣別時,用單一結清幣別互抵淨額能保持俐落(見 多幣別分帳)。
別忘了基本功
最少轉帳結清只對「正確的額度」有效,而額度取決於每筆消費都記好誰墊付、誰分攤。先把這步做對——見 旅行分帳完整教學。
RFok Split 自動算出淨額並產生最少轉帳結清方案——你看到一份簡短、可驗證的「誰付誰」清單,以群組結清幣別計價,無論多少人、多少幣別。 免費試用。