假设我们有n
个字词和n/k
"页面" (假设n/k
是一个自然数)。所以我们有一本"字典"这实际上是一个"页面的数组"其中每个页面也是一个数组,并且有k
个单词。
对单词进行排序,使得页面i
中的所有单词在词典上都小于页面i+1
中的单词,但是每页中的单词都不是'\ t}排序
我需要编写一种方法来查找"字典"中的特定单词。我知道我应该使用二进制搜索来找到正确的页面,但我不确定如何,因为每个页面中的单词都没有排序。
我错过了什么?答案 0 :(得分:2)
如果您不知道每页上排序的第一个/最后一个单词是什么,那么二进制搜索只能找到哪一页可能包含该单词。
如果" top"页面中的单词出现在您想要的单词之前,然后您可以在此之前删除所有页面,但不能那个页面;在你的话之后,页面上可能会有另一个词。
如果页面中的首字出现在您想要的单词之后,那么您可以删除之后的所有页面,但不能那个页面;页面上可能还有另一个词出现在你的话语之前。
所以当你完成二进制搜索时,你会留下两页;页面 N ,其首字小于您想要的那个,页面 N + 1 ,其首字大于您想要的字。
然后,您必须在两个页面上进行线性搜索才能找到该单词。