用于编程的基本排序和搜索算法(Java)

时间:2014-11-22 11:17:06

标签: java algorithm sorting

我在哪里可以学习编程算法(java等),因为当我搜索排列,紊乱,排序等程序时,我总能找到数学算法。

示例:Counting Derangement

由此得出以下关系:

!n = (n - 1) (!(n-1) + !(n-2)).\,
where !n, known as the subfactorial, represents the number of derangements, with the starting values !0 = 1 and !1 = 0.

Notice that this same recurrence formula also works for factorials with different starting values. That is 0! = 1, 1! = 1 and

n! = (n - 1) ((n-1)! + (n-2)!)\,
which is helpful in proving the limit relationship with e below.

Also, the following formulae are known:[4]

!n = n! \sum_{i=0}^n \frac{(-1)^i}{i!},
!n = \left\lfloor\frac{n!}{e}+\frac{1}{2}\right\rfloor , \quad n\geq 1,
!n = \left[ \frac{n!}{e} \right] , \quad n\geq 1

我发现另一个例子是当我查找java中的排序时,我看到O(n log n)或O(log n)术语,我根本不理解。我不擅长数学,但同时我对编程非常感兴趣。请帮我找一本书或网站,以了解编程语言中所需的排序算法

3 个答案:

答案 0 :(得分:6)

算法是关于数学的。他们与语言无关。只要您了解其语法,即基本数据类型,运算符,决策等,您就可以使用任何语言实现算法。许多语言都提供了实现已知和/或有用算法或功能的库(例如用于排序,加密等)。 )

这就是为什么搜索“java算法”是一个糟糕的搜索字符串。您应该搜索“java programming basics”

如果你想了解算法的背后(美),我强烈建议你阅读这本伟大的书:"Programming Pearls" (2nd edition)。第一版写于1983年,17年后了解why the author decided to write a second edition很有意思。

您还可以查看在线讲座for instance MIT ones

关于问题的O(log(n))部分,这是表达computational complexity of an algorithm的表示法(当您想要了解算法可以获得的性能时,或者如果您想要传达你自己算法的表现。)

对于Java,您可以从Oracle's tutorials开始。

答案 1 :(得分:3)

我在Coursera上取了Algorithms IAlgorithms II,他们很棒。该课程还有一个textbook

答案 2 :(得分:2)

O(n log n)或O(log n)Big O notation。我链接到了解释最常见情况(如您要求的示例)的部分。 还有excellent answer on stackoverflow

有关优秀文章,请参阅Algorithm Tutorials on Topcoder

The Importance of Algorithms是很好的教程(解释基本算法,并提供Big O表示法的示例)。

Basics of combinatorics涵盖了您的问题 - 安排。

对于图书 - 请参阅Introduction to AlgorithmsAlgorithms, 4th Edition