【问题标题】:Binary search on a "dictionary" (two dimensional array)“字典”(二维数组)上的二进制搜索
【发布时间】:2014-11-28 11:43:52
【问题描述】:

假设我们有 n 单词和 n/k "pages"(假设 n/k 是一个自然数)。所以我们有一个“字典”,它实际上是一个“页面”数组,其中每个页面也是一个数组,并且有 k 字。

单词的排序方式使得i 页中的所有单词在字典上都小于i+1 页中的单词,但每个页面中的单词没有排序

我需要编写一个在“字典”中查找特定单词的方法。我知道我应该使用二进制搜索来找到正确的页面,但我不太确定如何,因为每个页面中的单词都没有排序。

我错过了什么?

【问题讨论】:

    标签: arrays algorithm binary-search


    【解决方案1】:

    如果您不知道每个页面上排序后的第一个/最后一个单词是什么,那么二进制搜索只能找到可能包含该单词的页面对。

    如果页面中的“顶部”单词出现在您想要的单词之前,那么您可以删除之前的所有页面,但不能那个页面;在您的单词之后的页面下方可能还有另一个单词。

    如果一个页面中最上面的单词出现在你想要的单词之后,那么你可以删除之后的所有页面,但不能那个页面;在您的单词之前的页面下方可能还有另一个单词。

    因此,当您完成二分搜索后,您将剩下两页;第 N 页的顶部单词小于您想要的单词,以及页面 N+1 的顶部单词大于您想要的单词。

    然后您必须在两个页面上进行线性搜索才能找到该单词。

    【讨论】:

    • 那么在这种情况下我应该使用什么正确的“停止条件”?是right - left == 1吗?
    • 是的,那是合适的。不要忘记处理您想要的单词是“顶部”单词的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    相关资源
    最近更新 更多