反転ペアのカウント
分割統治の古典的な用途は、次の問題を解決することです。 アレイ所与対:異なる、同等の要素をアレイ状に反転ペアの数をカウントし、ようにと。(i 、j )a [ i ] > a [ j ] i < ja [ 1 … n ]a[1…n]a[1\dots n](i 、j )(i,j)(i,j)a [ i ] > a [ j ]a[i]>a[j]a[i] \gt a[j]i < ji<ji \lt j これに対する1つのアプローチは、マージソートを実行することですが、副問題の反転ペアの数もカウントします。マージステップ中に、2つのサブ問題にまたがる反転ペアの数をカウントし、サブ問題のカウントに追加します。 これは良いですが、時間アルゴリズムを提供しますが、これは配列を台無しにします。O (n ログn )O(nlogn)O(n\log n) 我々は追加の制約がある場合は、アレイは、読み取り専用であることを、我々はコピーでコピーして取引をする、またはカウントを行うために、バイナリツリーをバランス順序統計のような追加のデータ構造を使用し、どちらも使用することができますスペース。Θ (n )Θ(n)\Theta(n) 現在の問題は、実行時間に影響を与えずに、スペースを改善することです。すなわち 反転ペアの数をカウントする時間アルゴリズムはありますか。これは読み取り専用配列で機能し、サブリニア(つまり)スペースを使用しますか?o (n )O …