Match第三个参数为-1时的计算规则(旧文迁移)

发布时间 2023-08-13 17:55:03作者: 熬肥妖

以前学二分法的时候,一直以为,Match的第三个参数只要不为0就是以二分法规律进行查找的,可是今天测试了一下,发现人家用的居然是历遍法,规则是:

从上往下开始找,遇到比查找值小的前一个的位置,或者第一次出现与查找值相同的位置;如果查找值比查找范围内的第一个值大,则结果为NA;如果查找值比查找范围里所有的数都小,那就返回最后一个的位置。

 

为说明情况,示例中所有数据是0-9之间的整数。来看几个测试结果。

查找1:

从B2开始往下找,第一次出现1的位置是第六行,所以结果是6。

查找2:

同上,从B2开始往下找,第一次出现2的位置是第五行,所以结果是5。

查找3:

同上,从B2开始往下找,第一个出现3的位置是第二行,所以结果是2,后面再出现的3被忽略。

查找4:

从B2开始往下找,虽然第一次出现4的位置是第七行,但是在第二行出现了比4小的3,所以结果是3所在的前一行1。

查找5-8与查找4原因相同。

查找9:

B2比9小,于是笨电脑就以为下面的数据都比9小,于是返回NA。

如果查找值比查找范围里所有的数都小,那就返回最后一个的位置。

 

后来又编了段代码测试Match第三个参数分别为1和-1时的运行时间,发现差异真的很大,如果-1也是按二分法进行查找的话,运行速度不会是1的六倍。

目前这个只是从结果中反推出来的,并无任何源代码佐证,欢迎大家参与拍砖,谢谢。