Bigoish: Test the empirical computational complexity of Rust algorithms - Bigoish:Rustアルゴリズムの実行計算量を検証する

実行で証明!Rustコードが本当に $O(n\log n)$ か確かめる方法

要約

bigoish は、関数の実行時間データから「どの計算量モデルが最も当てはまるか」を統計的に判定するRust向けテストライブラリです。期待するモデルが実際に最良フィットかを自動判定します。

この記事を読むべき理由

実装したアルゴリズムが理論どおりにスケールしているかはバグ発見やパフォーマンス保証に直結します。特に日本のプロダクトでは、大量データやリアルタイム処理での挙動確認が重要です。本ツールはテストに組み込めるためCIでの防衛線になります。

詳細解説

例(要旨):

// rust
use bigoish::{N, Log, assert_best_fit, growing_inputs};

fn sort(mut v: Vec<i64>) -> Vec<i64> { v.sort(); v }

fn make_vec(n: usize) -> Vec<i64> {
    use fastrand;
    std::iter::repeat_with(|| fastrand::i64(..)).take(n).collect()
}

// n * log(n) が最良フィットかを確認
assert_best_fit(N * Log(N), sort, growing_inputs(10, make_vec, 25));

実践ポイント

以上を取り入れれば、実装が本当に期待どおりスケールしているかを自動テストで守れるようになります。