2017-09-16 9 views
0

バイナリ検索は、ソートされたエントリで動作します。このアルゴリズムによれば、エントリ数(n)が偶数であれば、最初にn/2番目のエントリを検索する。それがキーの場合は、それ以外の場合はキーがn/2より小さいかどうかをチェックします。それがより小さい場合、残りの半分を破棄して、インデックス1からn/2 -1まで検索が続きます。同様に、検索されたキーが見つかるまで、プロセスが繰り返されます。 奇数のエントリの場合、中間の位置はn-1/2です。バイナリ検索でテーブルを読み込むと、SAP ABAPでエントリが重複した場合の最初のエントリが返されるのはなぜですか?

私の質問は、重複するエントリがあり、11122233のような昇順でソートした場合です。今度は、key = 1(構文を無視してください)のテーブルバイナリ検索を読んで、アルゴリズムに従って/ 2 = 4ですが、4番目の位置は1ではないので、1から4番目の位置に検索が続きます。さて、n/2 = 2番目の位置は1でキーです。したがって、検索は2番目のインデックスで停止します。したがって、2番目のインデックスが返されます。

しかし、read tableバイナリ検索では、1の最初のエントリ、つまりインデックス1が返されます。なぜそうなのか?説明してください。

+1

バイナリ検索のバリエーションがあります。キーを見つけたときに中断する人もいれば、最初に見つかったことを確認し続ける人もいます。 [ここをクリック](http://www.ffbit.com/blog/2013/02/26/first-occurrence-binary-search/)。これについてはあまり言わない。 SAPは最も有用と感じるものは自由に実装できますか? – trincot

+0

前の参加者と同意してください。 SAPは任意のアルゴリズムを自由に実装できます。それは「なぜ空が青いのか」という疑問です。 – Suncatcher

+0

これは、SAPがバイナリ検索のこの種の変種を使用していることを意味します。しかし、空がなぜ青色であるのかという質問は間違いありません。 – user3757558

答えて

4

ためのアルゴリズムhas been specified and implemented that way

加えバイナリ検索を使用すると、複数のヒット (表中の不完全な検索キーにエントリや重複したエントリ)、 によると最初のヒットがあった場合主索引 の行の順序が戻されます。これは、行番号が最も小さい行です。 READ TABLE文が見つけ何を変更すべきではありませんテーブルの最後にいくつかの全く関係のないエントリを追加 -

その背後にある理論的根拠は、あなたが安定した挙動を示すための言語を好むということでしょう。

関連する問題