複雑な割り勘の計算方法
よく友人多くで旅行に行きますが、旅費の清算の方法が面倒なので、なにか行列などをつかったエレガントな計算方法が無いかお知恵をお借りしたく思います。
イメージはこんな感じです。
A, B, Cの3人が旅行に行き、
Aさんが、A,Bの新幹線代金 20000 円を支払ったのに加え、AとCのガソリン代 8000 円を支払う
BさんがA, B, Cの食事代 6000 円をまとめて支払い
Cさんはまったく支払っていない
といった場合のときに、
うまく、A, B, Cさんの間での清算のための最終的なお金のやり取りをできるだけ、回数が少なくなるようにする分け方を考えたいと思っています。(
たとえば、振込みで清算するとすると振込み手数料がもっともかからない方法)(これは解がひとつになりそうも無いので、うまくできないかも知れません。)
3人で3つの支払いなら、まだ手計算で簡単ですが、これを一般的にM人でN取引があった場合の一般的な解法などはあるのでしょうか?行列などを使ってエレガントに説く方法はありますか?
すこし考えて見ましたが、
それぞれの行を各支払い(新幹線、ガソリン、食事の3行)にとって、それぞれの列を人にとって考えると(A, B, Cさんの3人)
行列 F = (20000, 8000, 6000) が支払金額の行列 (縦の行列ですが、横に書いています。)
G =
1,0,0
1,0,0
0,1,0
が支払った人を示す行列で、負担すべき人を示す行列は
H =
1,1,0
1,0,1
1,1,1
とすると、
I = G F がそれぞれの支払った金額で、J(i) = ( F(i) / Σj H(i,j) )としたときに
K = H J はそれぞれの使った(負担すべき)金額になり、
L = I - K としたときに、M(j) = Σi L(i,j) がそれぞれの人のネット支払・受取額となるところまでは考えてみたのですが、そこからが難しいです。(もっと簡単な計算やわかりやすい見せ方があるかもしれませんし、間違っているかもしれません。)ちなみに上の例では M=(12000, -6000, -6000)
そこから、3人以上の人数になったときの一般的に一番支払い回数が少なくする受け渡しのやり方をする方法が思いつきません。
よろしくお願いいたします。
お礼
そうですよね! お金のことで揉めるのはいやなので、第三者に教えていただいて助かりました! 「間違いないです」の一言で安心したので、ベストアンサーにさせていただきます。 お二人ともありがとうございました!