ウィキペディアの記事には、次のように「最適化された」バージョンのバイナリ検索を提示するBinary Search
というセクションがあります。Deferred detection of equality
int binary_search(int A[], int key, int imin, int imax)
{
while (imax > imin)
{
int imid = (imin + imax) / 2;
if (A[imid] < key)
imin = imid + 1;
else
imax = imid;
}
if((imax == imin) && (A[imin] == key))
return imin;
else
return KEY_NOT_FOUND;
}
Is this .... algorithm uses only one conditional branch per iteration
true? つまり、if
命令は翻訳されCMP
、命令はアセンブリに翻訳されているので、言語よりも言語の方が優れているとはBranch
思えません
。高水準言語で考慮する必要があるような違いはありますか? 「deffered」バージョンのコードは管理者にとってよりタイトに見えますが、ステートメントの作成方法に最適化やペナルティはありますか?if-else
if-else if-else
if-else