首页 文章

为什么在SAP ABAP中重复输入条目时,为什么读取带二进制搜索的表会返回第一个条目?

提问于
浏览
0

二进制搜索适用于已排序的条目 . 根据算法,如果条目数(n)是偶数,则它首先搜索第n / 2条目 . 如果是密钥,则返回,否则检查密钥是否小于或大于位置的n / 2 . 如果它更小,那么搜索从索引1继续到n / 2 -1,丢弃剩下的一半 . 类似地,该过程重复直到找到搜索到的密钥 . 在奇数个条目的情况下,中间位置是n-1/2 .

所以我的问题是,如果有重复的条目,我们按升序排序,如11122233.现在,如果我们读取表二进制搜索键= 1(请忽略语法),然后根据算法,n / 2 = 4但是第4个位置不是1,所以搜索从1位继续到第4位 . 现在,n / 2 =第二个位置,它是1,它是关键 . 所以搜索在第二个索引处停止 . 所以返回第二个索引 .

但是在读取表二进制搜索的第一个条目1中,即返回索引1 . 为什么这样?请解释 .

1 回答

  • 4

    因为算法has been specified and implemented that way

    当使用添加BINARY SEARCH时,如果存在多个命中(由于搜索关键字不完整或表中的重复条目),则返回根据主索引中的行的顺序的第一次命中 . 这是行号最小的行 .

    这背后的基本原理是您希望语言表现出稳定的行为 - 在表的末尾添加一些完全不相关的条目不应该改变 READ TABLE 语句所定位的内容 .

相关问题