Java搜索算法[关闭]

Posted

技术标签:

【中文标题】Java搜索算法[关闭]【英文标题】:Java Search algorithm [closed] 【发布时间】: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 的问题 【参考方案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;
    
 

【讨论】:

以上是关于Java搜索算法[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

java二分搜索算法怎样实现?

哪个是更好的字符串搜索算法? Boyer-Moore 还是 Boyer Moore Horspool? [关闭]

哪个是更好的字符串搜索算法? Boyer-Moore 还是 Boyer Moore Horspool? [关闭]

搜索引擎算法研究专题六:HITS算法

搜索引擎算法研究专题七:Hilltop算法

Java入门:基础算法之线性搜索