2

私は現在配列を扱っていますが、ソートされた配列を.includeで置き換えて反復検索することで、関数の1つを高速化しようと決めましたか? 驚いたことに、プログラムの合計実行時間は 2:12 から 9:53 になりました。これに混乱して、.include のソース コードを見に行きましたか? そして、それはCで書かれた単なる反復チェックであることが判明しました

rb_ary_includes(VALUE ary, VALUE item)
{
        long i;

        for (i=0; i<RARRAY_LEN(ary); i++) {
                if (rb_equal(RARRAY_AREF(ary, i), item)) {
                        return Qtrue;
                }
        }
        return Qfalse;
}

特定のアイテムがソートされた配列、おそらく宝石にあるかどうかを判断するより速い方法はありますか? それとも、独自の二分探索法で書くという難しい方法で物事を行う必要がありますか?

4

1 に答える 1