作业帮 > 数学 > 作业

ABAP READ TABLE使用BINARY SEARCH

来源:学生作业帮 编辑:神马作文网作业帮 分类:数学作业 时间:2024/11/11 21:44:15
ABAP READ TABLE使用BINARY SEARCH
如题,read table使用binary search,with key有多个字段的时候,寻找数据的内部逻辑是怎样的
比如有内表(按A,B已排好序)
T_DATA
A B C
1 1 1
1 2 2
2 1 3
2 2 4
2 3 5
3 1 6
3 2 7
3 3 8
现在用如下语句查找
READ TABLE T_DATA INTO W_DATA WITH KEY A='2' B = '3' BINARY SEARCH.
可以找到C='5'的这条数据
现在的问题是,我想知道具体的内部逻辑是怎样的,我有两个猜想.
1.先找A='2',再找B='3'?两次都是二分法查找?但第一次二分法如何能找出多条数据?
2.直接将A和B合并,条件转换成AB='23',这样就算多个字段,也符合二分法查找方式,比较偏向这种.
有谁来证实下,或者知道正确的内部逻辑,非常感谢.
ABAP READ TABLE使用BINARY SEARCH
对于内表的二分查找,与对内表的排序一样,都是先对比指定的第一个字段,再对比指定的第二个字段...直到对比完指定的第n个字段.所以,猜想1是正确的逻辑.借你的例子,它是先二分查找找出所有A='2'的数据,然后再从筛选得出的数据中去二分查找B='3'的数据,如果有多条满足条件的数据,则返回内表中满足条件的索引最小的一条.在做二分查找之前,需要先对内表以查找的字段顺序进行升序排序,也就是说,在你的例子中用二分查找之前要对内表按A、B的顺序进行排序,即SORT T_DATA[] BY A B ASCENDING.否则不一定能查找到正确的确结果 
再问: 非常感谢,但是有个疑问 你说的“先二分查找找出所有A='2'的数据”,也就是第一步,先不看B='3',既然是二分法,如何让能保证找出所有A='2'的数据,二分法如何定位多条数据的呢
再答: 找到的多条数据是语法处理的一个中间存储过程,是对外不可见的,既然是语法自动完成的,又何必去深究这么多呢