算法选择 - 了解哪些和为什么

时间:2009-12-15 09:53:34

标签: java algorithm

我正在写一份文件,不确定以下内容:

  1. 我将比较可以在相同结构上执行的两种算法但我们不能说一种比另一种更快(我将定义a优于b的情况,反之亦然);为此,我将使用quicksort和bubblesort。这是一个不错的选择吗?

  2. 挑选2个适用于大型数据集的算法,并定义为什么一个比另一个好得多。为此,我打算使用线性搜索和二进制搜索。

  3. 您对我选择解释这些问题的算法有什么看法,它们看起来合适吗?

    谢谢大家!

7 个答案:

答案 0 :(得分:2)

1)

比较quicksort和bubblesort可能不是一个好主意。在小案件中,甚至可能无法击败快速排序。

至少尝试quicksort和insertsort。

我想尝试使用Prim和Kruskal最小生成树算法来显示密集和稀疏图上两种算法的优缺点。

2) 比较二分搜索和线性搜索就是一个很好的例子。

答案 1 :(得分:1)

不,因为除了极少数涉及极小数据集的情况外,快速排序明显优于冒泡排序。

Quicksort是一种O(n log n)算法。冒泡排序是一种O(n 2 )算法。

选择其他O(n log n)排序中的一个,如合并排序或堆排序。

或者将冒泡排序与选择排序或插入排序进行比较,两者都是O(n 2 )。

答案 2 :(得分:1)

这在很大程度上取决于确切的任务。你提出的两种情况都显得过于明显。

线性搜索和二元搜索之间的区别是如此之大且显而易见(在大型数据集上)它根本不需要任何讨论......除非这是一个非常基础的课程。

答案 3 :(得分:1)

由于这必须是家庭作业或非常相似的东西,我认为最好建议您选择自己的算法进行比较。您的分数将更多地取决于分析的质量,而不是您选择的算法。关于如何设置任务,我们已经有了一些很好的建议,我不会重复甚至进一步添加它。

答案 4 :(得分:0)

研究quicksortbubble sort并找到答案 - 在某些情况下,可能是一个比另一个好。

维基百科有很多关于sorting algorithms的有用信息,请仔细阅读和研究。

比较算法最重要的方面是computational complexity和内存使用;另见analysis of algorithms

答案 5 :(得分:0)

比较算法的常用方法是使用Big-O-notation(Landau表示法)来描述函数的限制行为。

只是在(非常)简介:

假设您有一个带 n 元素的函数(排序算法:集合的大小)。现在我们查看算法并尝试找出,它是需要终止的“步骤”(与 n 相关)的最大数量。

某些算法以恒定时间(Hashtable read)终止,即O(1)。如果你有一个算法,必须“查看”每个元素一次,它是O(n)(线性),如果你需要查看它两次,那么它是O(2n)(仍然是线性的)。我提供的链接有更多的例子。

对于常见算法,O符号是众所周知的。但分析现有算法并不困难。 (真正的挑战是为给定问题发明算法,该算法比已知的更快;)

答案 6 :(得分:0)

对于(1)我建议使用O(Log N)访问Hashmap(O(1)访问)的树映射。

基本的“O”似乎显然是最喜欢的hashmap,但随后:

  • 树由日志N绑定,而Hashmap的最坏情况是O(N) - 当一切都落在一个桶中时
  • 树有机地生长以适应任意数量的元素。由于nItems / nBuckets的比例不好,Hashmap效率低下,在这种情况下你必须重新发送

还有一些其他的东西xyou可以弄清楚......:)