2017-09-16 33 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语句定位是什么。