题目
How many character comparisons will be made by Horspool’s algorithm in searching for each
of the following patterns it the binary text of one million zeros?
(a) 01001
(b) 00010
© 01111
解法
(a)01001
首先制作shift table,得到如下表格:
数字 | 偏移距离 |
---|---|
0 | 1 |
1 | 3 |
因此数字从第五位开始比较,每次比较一次并偏移一次,总共比较了1M - 4次。
(b)00010
首先制作shift table,得到如下表格:
数字 | 偏移距离 |
---|---|
0 | 2 |
1 | 1 |
因此数字从第五位开始比较,每次比较两次并偏移两次,但最后一位无法被比较,总共比较了2*(1M - 4)/2次。
©01111
首先制作shift table,得到如下表格:
数字 | 偏移距离 |
---|---|
0 | 4 |
1 | 1 |
因此数字从第五位开始比较,每次比较并偏移四次,总共比较了(1M - 4)/4次。
猜想
假设0的偏移距离为n,第一个1的位置距离pattern最后一位的距离为m+1,设字符串总长度为L1,未比较位数的总长度为L2总次数
公式为 总次数 t =(m+1) (L1 - L2)/n*
e.g:
在(a)中 n = 1;m + 1 = 1;L1 = 1M;L2 = 4;
在(b)中 n = 2;m + 1 = 2;L1 = 1M;L2 = 4;
在©中 n = 4;m + 1 = 1;L1 = 1M;L2 = 4;
能得到以上答案。