【问题标题】:Java Search algorithm [closed]Java搜索算法[关闭]
【发布时间】:2012-10-18 19:36:04
【问题描述】:

任何人都可以通过以下实现告诉 java 示例/算法在数组中搜索元素:
- O(n^2) 算法和
- O(n) 算法

注意:这不是家庭作业。

【问题讨论】:

  • API 中的 Arrays.binarySearch 怎么样???
  • O(n²) 应该很容易;取长度,将其命名为 n,等待 n² 秒,然后进行线性搜索。
  • @Iarsmans,我认为他正在寻找 -O(n^2) 和 -O(n) 算法(大 O 之前的减号)
  • 如果不是作业,请解释在 O(n²) 算法中搜索的原因 - 如前所述,对于琐碎的搜索没有意义。 (并且您可以在排序数组中进行比 O(n) 更好的搜索,如 @chaitanya10 所述
  • @DThought:正是我的想法。我无法想象为什么有人在没有家庭作业的情况下搜索 O(n^2) 算法的原因....-1 的问题

标签: java algorithm search


【解决方案1】:
  • 在数组中搜索单个项目是O(N)
  • 如果您使用具有两个嵌套循环的简单算法*,则在数组中搜索最长的递增数字是O(N^2)

注意:这不是 Java 特定的。


* 存在执行此搜索的更快算法。

【讨论】:

    【解决方案2】:

    使用O(n²) 搜索算法毫无意义。

    要执行O(n) 算法,只需搜索列表中的元素。

    for(int i=0;i<array.length;i++)
      if(array[i]==search)
        return array[i];
    

    【讨论】:

      【解决方案3】:

      O(n) 只是线性搜索;从头到尾遍历列表,直到遇到要搜索的内容。

      你想要一个 O(n²) 算法很奇怪......但你可以做的是,在你的 for 循环的每次迭代中(在 O(n) 搜索中),睡眠的持续时间由数组(Thread.sleep(array.length))。 “休眠”时间段为O(n),因为它与数组的长度呈线性关系,整体线性搜索也为O(n),因此整个过程为O(n²)


      O(n)

      for (int i = 0 ; i < array.length ; i++) {
          if (array[i] == SOME_ELEMENT) {
              // ...
              break;
          }
       }    
      

      O(n²)

      for (int i = 0 ; i < array.length ; i++) {
          Thread.sleep(array.length);
          if (array[i] == SOME_ELEMENT) {
              // ...
              break;
          }
       }
      

      【讨论】:

        猜你喜欢
        • 2011-12-13
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-13
        • 1970-01-01
        • 2013-02-13
        相关资源
        最近更新 更多