怎么搜索?
怎么可能达到 O(N+M )呢?对比一次还需要M次呢.N次就能确认头部?
aaaabbaaaa
aabaa
思考
N内找M
1,M顺序顺序
2,M抽样,对应位置对比.
如何抽样?
1,3,5这么着随机抽样吧.
或者指定一个序列抽样,为什么不能随机抽样?非要指定呢?
指定相对于随机抽样有什么好处?
抽样或许抽到的都有.另一些没抽到的却没有存在.
指定的难道就不会都有?然后另一半都没?
当然也可能.没区别.首次对比,看不出两种的区别.
第一次没找到
然后移动一位,第二次对比的时候,有优势也行啊.那么有什么优势?
除非第一次对比后的结果,对于第二次来说有价值,否则就又跟第一次对比一样,随机跟指定没区别.
有个主意,
若 采样时 index是, 1,2 5,6 8,9 这么着,中间间隔随机.而一次2个数字的话.
若第一次对比,都对的上,则对比另一半吧.总的对比吧.
若第一次对比不对呢?
若是 1和2 都对着呢,而1和2又不相同,那么,就不用对比下一组了.
N的指针移动,1与(之前N中与2相比的数字)对比,是没必要的.跟2相同,就不会跟1相同的,直接N的指针再进一步.
等等,也就是 直接进了两步.那么我的采样,为什么每次都是 上说的那样呢
1,2 5,7 11,14
分别间隔0,1,2这样的话,我只需要按上面的原理,就可以直接跳过多个,往后移动指针了.
等等
2和5,7和11也有间隙.为什么不也利用上?
1,2,4,7,11
这样是一次跳0,1,2,3,4...
先从简单开始,先假设,这些位置的数字都不一样
若第一位就错误,直接N的指针挪下一个
若第二位错误,还是需要挪一次,因为1可能跟N的2(以后称为N1,M0)相同.N的第二个数字,和M的第一个数字
所以上面的指定序列要改改
(哦,上面1索引开始,下面0索引开始,刚看见)
0,2,5,9,14
间隔1,2,3,4
若第二位正确 N2与M2相同
若5不同的时候
挪一次,那样不对,N2可能等于M1呢
还用原来的序列
0,1,3,6,10
若0相同,对比1,
若0不同,挪动一次1位.
若0同,1不同
一样,挪动一次1位.
若0,1相同
3相同,则继续
3不同则,直接移动2次
N2与M0对比
若到6才不同呢
移动几次?
脑子里想不出来了
做个 示例
0 1 X 3 X X 6 X X X 10
0 1 X 3 X X 6 X X X 10
数字对着数字则没必要
数字与数字不同是前提
所以直接挪4个
6不同则挪7次
上次的数字是多少,就让他加1次
就是需要挪动的距离
X X 10
0 1 X 3 X X 6 X X X 10
思路就这个思路
但是序列不对着呢
10的时候,移动7次的话,10跟3对应着呢.没必要的.8次才对,所以序列有问题.
如何创造序列,我想象
0 1 X 3 X X 6 X X X 10 X X X 14
好像要这样.
=========
考虑一下 自己产生的序列中的数字可能相同的情况.
那时候怎么判断,怎么移动呢?
思路对吗?
不一定对,思考对不对,只有到尽头才知道.
没人讨论,自己很难思考下去
以后再说吧.自己和自己讨论吧.