ソートの速度を決める要因についてメモ

思いつく限りの要因をあげてみる。

  • データ内容
    • 個別比較が必要かどうか
    • 比較にかかる時間
    • 比較の分割性
    • 比較の並列度
  • データ
    • 素数
    • 読み込みにかかる時間
    • 読み込みの並列度
    • 交換にかかる時間
    • 交換の並列度
  • ワーキングメモリ
    • 素数
    • 再帰段数
    • 読み込みにかかる時間
    • 読み込みの並列度
    • 書き込みにかかる時間
    • 書き込みの並列度
  • 初期状態
    • どの程度ソートされているか
    • 事前にソートの程度を知っているか

具体例は。

スパゲティソート
個別に比較する必要がない。比較にかかる時間は定数。並列度は要素数と同じ。
辞書順ソート、多倍長数値のソート
個別に比較する必要がない。比較にかかる時間が各データ長Nに比例する。比較をN段階に分割できる。並列度は要素数と同じ。
データベース上のソート
通常、要素数は非常に大きい。読み込みにかかる時間も大きい。交換にかかる時間も大きいが、読み込みより小さい。並列度は実装に大きく依存し、それなりに高いものが多い。

〆。

通常はソートの計算量の指標として個別比較の回数を用いる。もちろんこれは大抵の場合に適切だが、交換よりも読み書きで律速される条件も多い。読み書きは特にハードウェアへの依存が大きく、同一アルゴリズムでも実装によって効率が大きく変わってくる。身近な例としてキャッシュヒット率があるだろう。