五個人的帳為什麼只要轉兩筆:最少筆數結算是怎麼算出來的
我們團隊最常被問的一個問題是:「app 說我只要轉一筆給阿宅就好,可是我明明也欠小美錢,這樣對嗎?」
對,而且這是分帳工具最有價值的一個功能。但因為它算出來的結果跟直覺不同,很多人會不安。這篇想把「最少筆數結算」的邏輯拆開,讓你看完之後對那個數字有信心。
先忘掉「誰欠誰」,只看「淨額」
假設五個人去金澤三天,Vic 付了民宿、阿宅付了租車、小華付了近江町市場的海鮮丼、小美付了兼六園門票、阿明付了最後一晚的居酒屋。三天下來 23 筆帳,每一筆都有不同的付款人和不同的分攤組合。
如果你照著「這筆誰欠誰」逐筆還,最多會有二十幾筆轉帳,而且很多是互相抵銷的:Vic 欠小華 1,200,小華欠 Vic 900,兩個人各轉一次等於白忙。
正確的第一步是:每個人算一個數字,就是「我付出去的總額」減掉「我應該分攤的總額」。
- 正數代表你墊了錢,別人要還你。
- 負數代表你被墊了,你要還別人。
- 五個人的數字加起來一定是零,因為錢只是在你們之間移動。
假設算出來是:Vic +6,000、阿宅 +4,200、小華 −4,200、小美 −1,800、阿明 −4,200。
這一步做完,23 筆帳已經消失了,剩下五個數字。誰欠誰的歷史完全不重要,重要的只有每個人最後的淨位置。
然後就是配對:欠錢的轉給墊錢的
有了五個數字,結算變成一個很簡單的配對遊戲:讓負數的人把錢轉給正數的人,直到所有人都歸零。
- 小華 −4,200 轉給阿宅 +4,200,兩個人同時歸零。一筆。
- 阿明 −4,200 轉給 Vic +6,000,阿明歸零,Vic 剩 +1,800。兩筆。
- 小美 −1,800 轉給 Vic +1,800,兩個人歸零。三筆。
五個人、23 筆帳,最後三筆轉帳結清。如果剛好有數字可以完全對上(像小華跟阿宅),還可以更少。
這就是「最少筆數結算」的全部。它不是什麼高深的演算法,是把「誰欠誰」換成「誰淨欠多少」之後,自然得出的結果。
為什麼最多只需要「人數減一」筆
有一個很好記的規則:n 個人結算,最多需要 n − 1 筆轉帳。五個人最多四筆,八個人最多七筆。
理由是每一筆轉帳至少會讓一個人歸零(欠得少的人把錢全部轉出去,或者墊得少的人被全額還清)。每筆至少消掉一個人,最後一個人會自動歸零,因為總和是零。所以 n 個人最多 n − 1 筆。
如果你們是四個人,app 卻叫你轉五筆,那 app 做錯了。
「可是我明明沒跟阿宅有任何往來」
回到開頭那個問題。小華整趟旅行沒有一筆帳是直接跟阿宅有關的,為什麼 app 叫他轉錢給阿宅?
因為淨額結算的邏輯是把群組當成一個整體。小華欠的是「這個群組」4,200,阿宅是「這個群組」欠他 4,200,讓小華直接轉給阿宅是最省事的路徑。錢經過誰不重要,重要的是所有人最後都歸零。
我們團隊的經驗是,這一點要在出發前就跟大家講清楚。旅行結束後才解釋「為什麼要轉給沒往來的人」,總會有一兩個人覺得怪。事前講,大家就會理解 app 給的是「最省事的路徑」,不是「你們之間的帳」。
一個常見的陷阱:部分還款
假設小美只先轉了 1,000 給 Vic,剩下 800 說下週再還。這時候一定要把那筆 1,000 記進去,不然 app 還是會認為小美欠 1,800。
我們在 Spidee 裡把這種轉帳叫「結算轉帳」,它跟支出一樣是一筆記錄,會讓淨額重新計算。記完之後,app 會告訴你小美還欠 800,而且會重新排一次最少筆數的路徑。
分帳工具的價值不在記帳,記帳用便條紙也行。價值在結算那一刻,把二十幾筆糾纏的帳,變成兩三筆誰都看得懂的轉帳。這篇希望讓你下次看到那個數字時,知道它是怎麼來的。