勉強のために二分探索のコードを書いたのですが、どちらもミリ秒未満とはいえstd::binary_search()
と比べると倍近く遅いようです。
これは、STDのコードがカリカリにチューニングされていたり高度な?書き方をしていることに由来するのでしょうか?
それとも、私の下記のコードには何かボトルネックになる要素があるのでしょうか?
C++
1#include <algorithm> 2#include <functional> 3#include <vector> 4typedef std::vector<int>::const_iterator Iterator; 5 6template<class Compare> 7Iterator BinarySearch(Iterator begin, Iterator end, Compare comp) { 8 auto it = begin; 9 auto not_found = end; 10 11 while (std::distance(it, end) > 0) { 12 auto mid = it; 13 std::advance(mid, std::distance(it, end) / 2); 14 auto comp_result = comp(*mid); 15 16 if (comp_result == 0) { 17 return mid; 18 } else if (comp_result < 0) { 19 it = mid; 20 ++it; 21 } else { 22 end = mid; 23 } 24 } 25 return not_found; 26}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。