软件正在吃掉世界,而软件的核心则是算法。算法千千万万,又有哪些算法属于“皇冠上的珍珠”呢?Marcos Otero 给出了他的看法。 什么是算法?
—Thomas H. Cormen,Chales E. Leiserson,算法入门第三版 简而言之,算法就是可完成特定任务的一系列步骤,它应该具备三大特征:
以下是 Marcos Otero 推荐的十大算法: 1、归并排序、快速排序及堆积排序 最好的排序算法跟需求密切相关,很难评判。但是从使用上说,这三种的使用频率更高。 归并排序由冯•诺依曼于 1945 年发明。这是一种基于比较的排序算法,采用分而治之的办法解决问题,其阶是 O(n^2)。 快速排序可采用原地分割方法,也可采用分而治之算法。这不是一种稳定的排序算法,但对于基于 RAM(内存)的数组排序来说非常有效。 堆排序采用优先级队列来减少数据中的搜索时间。该算法也是原地算法,并非稳定排序。 2、傅里叶变换与快速傅里叶变换 我们的整个数字世界都使用这两个简单但非常强大的算法,其作用是将信号从时域转为频域或者反之。实际上,你看得到这篇文章得感谢这些算法。 互联网、你的 WiFi、智能手机、电话、计算机、路由器、卫星,几乎所有内置有计算机的东西都会以各种方式使用这两算法。如果不研究这些算法,你就拿不到电子、计算或通信方面的学位。 3、迪杰斯特拉(Dijkstra)算法 Dijkstra是 一种图谱搜索算法。许多问题都可以建模为图谱,然后利用 Dijkstra 寻找两个节点之间的最短路径。如果没有 Dijkstra 算法,互联网的运营效率必将大大降低。虽然今天我们已经有了更好的寻找最短路径的解决方案,但出于稳定性的要求,Dijkstra 算法仍然被很多系统使用。 |