2017-09-16 34 views
0

二進制搜索與排序條目一起使用。根據算法,如果條目數(n)均勻,則它首先搜索第n/2條目。如果是鑰匙,則返回,否則它檢查鑰匙是否小於或大於位置的n/2。如果較少,則搜索從索引1繼續到n/2 -1,丟棄剩下的一半。類似地,重複該過程直到找到搜索到的鍵。 在奇數個條目的情況下,中間位置是n-1/2。爲什麼使用二元搜索讀表返回SAP ABAP中重複條目時的第一個條目?

所以我的問題是如果有重複的條目,我們已經按照11122233的升序對它進行了排序。現在,如果我們用key = 1讀取表二進制搜索(請忽略語法),那麼根據算法,n/2 = 4.但是第4個位置不是1,所以搜索從1到第4個位置繼續。現在,n/2 =第二個位置是1,它是關鍵。所以搜索停在第二個索引處。所以第二個索引被返回。

但在abap中讀取表二進制搜索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語句定位是什麼。