【问题标题】:Optimal Search criteria in this array?此数组中的最佳搜索条件?
【发布时间】:2009-12-13 07:56:10
【问题描述】:

我刚刚写了这个考试,其中有一个问题:考虑一个大小为 2n 的数组,其中奇数位置的数字按升序排序,偶数位置的数字按降序排序。现在,如果我必须在这个数组中搜索一个数字,这是一个好方法吗?选项是:

  1. 快速排序然后二分查找
  2. 合并两个排序好的数组,然后二分查找
  3. 顺序搜索

在1中,快速排序需要O(n log n)和二分查找,O(log n)

在 2 中,Merge 需要 O(n) 然后 O(log n) 进行二分查找

在 3 中,需要 O(n)。

所以 3 原来是要走的路。那是对的吗?有没有更好的选择?

编辑:我接受了卢卡斯的回答,因为他是第一个。唉,是另一种选择。我得到-1。 :(

【问题讨论】:

    标签: algorithm search


    【解决方案1】:

    您可以进行两次二分搜索 - 这是 O(log n),因为您忽略了常量(在本例中为 2)。

    【讨论】:

      【解决方案2】:

      如果你只是在这两个集合上进行二分搜索会不会更容易?因此 O(log n) 和 O(log n)?

      这样会不会更简单,所以如果第一步找到了,第二步就不需要了?

      【讨论】:

        【解决方案3】:

        检查它是偶数还是奇数,并在您感兴趣的数组部分进行二进制搜索。O(log n)。

        【讨论】:

        • 呵呵,那部分也让我觉得很恶心:不是说奇数是升序的;它表示数组奇数位置的数字按升序排列。
        【解决方案4】:

        我认为第二个选项符合您的标准。

        归并排序:我们可以很容易地从时间复杂度为 O(n) 的两个半排序数组中得到完整的排序数数组

        然后二分查找就会有O(logn)的时间复杂度

        【讨论】:

          猜你喜欢
          • 2012-05-18
          • 2011-11-26
          • 2015-03-19
          • 2016-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多