実装がより簡単だと思うので、ソリューションを投稿しています。
Line のオブジェクトを取得し、次の属性が定義されているとします。
- m (slope, initialized on start)
- c (constant, initialized on start)
- pos_m ( default 0 value )
- pos_c ( default 0 value )
Vこれで、これらの行のベクトルが 得られます。
V要素のキーm(O(nlogn)) を使用して並べ替えます。
VインデックスiセットV[i].pos_m = i(O(n))で反復します。
V要素のキーc(O(nlogn)) を使用して並べ替えます。
Vインデックスiセットで繰り返しV[i].pos_c = iます。(の上))。
- インデックスdo (O( n ))
result = 0を反復処理します。Viresult += | V[i].pos_m - V[i].pos_c |
並べ替えで、比較した値が等しい場合は、もう一方のキーを使用して順序を決定します (両方が等しい場合、それらは同じ行です)。たとえば、1. 2 つの線の傾きが同じ場合、定数を決定要因にします。