こちらの、与えられたキーが、配列に含まれるか否かを判別する関数を番兵を用いるverと用いないverの実装の比較に関して質問があります。
普通の線形探索では
bool linear_search(int A[], int n, int key) { // A[]: 配列, n:配列の要素の数 for (int i = 0; i < n; i++) { if (A[i] == key) return true; } return false; }
と書くのですが
bool linear_search(int A[], int n, int key) { // A[]: 配列, n:配列の要素の数 int i = 0; A[n] = key; // 番兵の設置 while (A[i] != key) i++; return i != n; }
このように番兵を用いることで定数倍の高速化が可能になっているそうなのですが自分には理解できません。
上のパターンでは0から順番に見ていってi番目になったらkeyを返し、下のパターンでは0から順番に見ていってkeyが見つからなかったらiを1ずつインクリメントしていくということをしてると思うのですがどう高速になっているのでしょうか?記事の方はif文がない分早くなっているとおっしゃているのですが結局両者ともn回見てない...?となってしまいます。どう高速になっているか詳しく教えていただけますと幸いです。よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/26 04:11 編集
2020/05/26 04:18 編集
2020/05/26 04:19
2020/05/26 04:24 編集
2020/05/26 04:23
2020/05/26 04:24
2020/05/26 04:25
2020/05/26 04:31
2020/05/26 04:35
2020/05/26 04:46
2020/05/26 06:17
2020/05/26 06:18
2020/05/26 06:24
2020/05/26 07:11 編集
2020/05/26 12:01