最近、私はインタビューでこの質問をされました。二分探索では、2つの比較があります。1つは中間値よりも大きい値、もう1つは中間値よりも小さい値です。一度だけチェックする必要があるように最適化できますか?
質問する
227 次
2 に答える
2
いいえ、できません。演算子を切り替えることはできますが(たとえば、大小の代わりに大小を使用する)、2つの比較になります。二分探索では、実際には3つの結果があり、そのうちの2つを比較してもどちらも当てはまらない場合は、3番目の結果になります。
例えば:
if (lookup < mid)
searchLower();
else if (lookup > mid)
searchUpper();
else
found(lookup);
演算子を切り替えると、関係する演算子が変わりますが、常に2つの比較が必要になります。
于 2012-08-03T16:21:01.297 に答える
2
はい、いくつかの方法で。
一部のバージョンのFortranに存在する3者間比較を実行する(「算術IF」を参照)。
x86(およびその他)アセンブリでは、1つを使用できますcmp
が、2つのブランチを使用できます。
同等性の遅延検出トリックを使用する。
于 2012-08-03T16:36:19.987 に答える