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搜索算法[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
哪个是更好的字符串搜索算法? Boyer-Moore 还是 Boyer Moore Horspool? [关闭]