多人分帳要減少轉帳,關鍵不是逐筆重播「誰替誰付了什麼」,而是先把每個人的所有支出與應分攤金額合併成一個淨額。淨額為正的人應收款,為負的人應付款;接著讓付款者與收款者配對,每次消去至少一方的餘額。這能把複雜債務網路壓縮成較少交易,但若要求數學上絕對最少筆數,還需處理組合搜尋與四捨五入等細節。

第一步不是配對,而是算清每人淨額

假設四人旅行,甲先付住宿 2400 元,乙付餐費 800 元,丙與丁沒有墊款;總支出 3200 元且平均分攤,每人應負擔 800 元。

每人淨額可寫成:

淨額 = 實際代墊 − 應負擔

  • 甲:2400 − 800 = 應收 1600 元
  • 乙:800 − 800 = 0 元
  • 丙:0 − 800 = 應付 800 元
  • 丁:0 − 800 = 應付 800 元

最後只需丙、丁各轉 800 元給甲,共兩筆。若沿著每張帳單逐項還款,可能產生更多小額轉帳,但最終經濟結果相同。

所有淨額相加應為零。若不為零,通常代表漏記支出、分攤金額不等於帳單總額,或小數處理出現差額。這是分帳工具最重要的完整性檢查。

債務可以畫成一張圖

把每個人視為節點,轉帳視為有方向的邊,就得到一張債務圖。原始紀錄可能有甲替乙付、乙替丙付、丙又替甲付的循環。循環中的部分金額可以互相抵銷,不必真的繞一圈付款。

例如甲欠乙 300 元、乙欠丙 300 元、丙欠甲 300 元,三人的淨額都為零,整個循環可直接消除。工具因此不需要保留每段原始債權,只需保存最終淨額。這稱為淨額結算。

不過在需要保留法律債權、報帳憑證或特定款項用途的情境,不能擅自把所有債務合併。一般朋友聚會可以重視便利,正式會計則要遵循原始憑證與制度。

貪婪配對如何快速產生方案

常見演算法把應收者和應付者分成兩組,反覆挑選一名付款者與一名收款者,轉帳金額取兩者餘額的較小值:

轉帳金額 = min(付款者尚欠金額, 收款者尚收金額)

完成後,至少有一人的餘額歸零,再處理下一組。若每次選擇最大債務者與最大債權者,通常能很快得到簡潔方案。

假設甲應收 900 元、乙應收 600 元,丙應付 700 元、丁應付 500 元、戊應付 300 元。可以安排:

  1. 丙轉甲 700 元,丙歸零,甲還應收 200 元。
  2. 丁轉乙 500 元,丁歸零,乙還應收 100 元。
  3. 戊轉甲 200 元,甲歸零,戊還欠 100 元。
  4. 戊轉乙 100 元,雙方歸零。

四筆即可完成。方案不唯一,換一個配對順序可能得到不同收款對象,但只要所有人的最終淨額正確,就同樣公平。

為何「很少筆」不一定是「絕對最少」

對有 k 個非零淨額的人,只要每筆交易至少消去一人的餘額,簡單方法最多可在 k − 1 筆內結束。但要找全域最少筆數,可能需要辨認哪些人的淨額能先組成總和為零的子群,再讓各子群獨立結算。

貪婪法在許多日常案例會得到最少或接近最少方案,卻不能對所有輸入保證全域最佳。絕對最佳化可能要回溯嘗試多種配對,參與者增加後,候選組合迅速成長。工具若標示「最少轉帳」,應說明它使用精確搜尋還是簡化演算法。

此外,最少筆數也不一定是最方便的方案。若跨銀行手續費、轉帳上限、某些人無法互轉,或大家希望只和主揪結算,就需要加入限制。數學筆數最少與實際摩擦最小,是兩個不同目標。

不平均分攤如何納入

有人沒喝酒、有人攜伴、有人只參加一晚時,先為每筆支出指定參與者或權重,再計算每人的應負擔。權重為二的人可理解為負擔兩份,權重為零者不參與該筆。

每筆帳單都應滿足:

所有參與者分攤合計 = 該筆帳單金額

完成全部帳單後,再把每人的代墊總額減去負擔總額。配對演算法不需要知道分攤為何不同,只處理最後淨額;公平性的判斷則發生在前面的分攤規則。

小數與四捨五入為何麻煩

100 元由三人平均分,每人精確負擔 33.333 元,無法以整數元完全表示。如果三人都記 33 元,總和只有 99 元;都記 34 元則變成 102 元。

工具可先以最小貨幣單位計算,再分配餘數。例如以元為單位時,可讓兩人負擔 33 元、一人負擔 34 元,總和仍是 100 元。餘數分給誰應採公開且一致的規則,例如依名單順序輪替,而不是讓同一人每次多付。

程式內也應避免直接用二進位浮點數反覆加減金額,因為某些十進位小數無法精確表示。把金額轉成整數最小單位,能減少零點零零零幾的幽靈差額。

如何核對工具輸出

先檢查原始帳單總額是否等於所有人的應負擔總額,再確認淨額總和為零。接著把建議轉帳套回每人餘額:付款會使負淨額向零增加,收款會使正淨額向零減少,最後每個人都應歸零。

若有人已私下付款,要把它當成一筆已完成的轉帳更新餘額,不要同時刪除原始消費,否則可能重複計算。正式付款前也應讓所有參與者確認帳目與分攤規則。

多人分帳的演算法分成兩層:先決定每人公平負擔,再以淨額和配對降低交易數。圖論讓循環債務得以抵銷,貪婪法快速產生簡潔方案,精確搜尋則處理真正最少筆數。工具能省去算術與配對,但不能替群體決定什麼才是公平;規則透明和可核對,仍比少一筆轉帳更重要。