在过去的几十年中,哪个世界上最重要的算法对人类贡献最大?
我认为这是开发人员应了解的良好常识。
更新:
如果可能,请保留特定编程算法的答案。
我想得到最重要的列表,每个答案只有一个算法。
请考虑说明算法为何如此重要和重要...
在过去的几十年中,哪个世界上最重要的算法对人类贡献最大?
我认为这是开发人员应了解的良好常识。
更新:
如果可能,请保留特定编程算法的答案。
我想得到最重要的列表,每个答案只有一个算法。
请考虑说明算法为何如此重要和重要...
Answers:
公/私钥加密非常重要。没有它,互联网商务将无处不在。
该算法存在于世界上的每台路由器中,用于识别网络中两个节点之间的最佳路由。
PageRank是一种链接分析算法,以Larry Page命名,由Google Internet搜索引擎使用,该算法为 超链接的文档集(例如,万维网)中的每个元素分配数值权重,目的是“测量”其相对集内重要性。
在计算机科学和信息论中,数据压缩或源编码是通过使用特定的编码方案,使用比未编码表示要使用的位数(或其他信息承载单元)更少的位(或其他信息承载单元)对信息进行编码的过程。
这可能太牵强,所以请发表评论。
我认为这样的例子之一是Smith-Waterman和Needleman-Wunsch算法及其近似。它们基本上都在做同一件事:将两个或多个字符串(序列)对齐。生物学具有重要意义。当DNA或蛋白质序列比对后,就会揭示出结构,功能和进化相似性的区域。
一种近似史密斯-沃特曼的启发式方法是BLAST。它允许在大型数据库序列中搜索生物学相似性。BLAST的普及性非常好-它很可能是生物学中使用最广泛的算法。生物信息学和基因组学的新领域具有比BLAST更精确的Smith-Waterman / Needleman-Wunsch算法的更新更好的近似值。
Smith-Waterman和Needleman-Wunsch的高通量逼近速度比BLAST快,可用于从shot弹枪测序中组装基因组-测序仪机器的产物是从基因组任意部分读取的大量DNA(十亿)。非常短(50至100个核苷酸)。该方法用于完成人类基因组计划。所有现代测序都是通过这种方式完成的。
存在大量的多序列比对算法-它们近似于Smith-Waterman / Needleman-Wunsch的多序列版本。多个序列作为一个组同时彼此对齐。与成对配对相比,这是一个困难得多的问题,但是解决方案可提供对相关序列的生物学功能,结构和进化历史的更多了解。
Siam将以下内容命名为20世纪最重要的算法:
1946年:针对Monte Carlo的Metropolis算法。通过使用随机过程,该算法提供了一种有效的方法,可以解决那些过于复杂而无法准确解决的问题。
1947年:线性规划的单纯形法。解决计划和决策中常见问题的绝佳解决方案。
1950年:Krylov子空间迭代方法。一种快速求解科学计算中大量存在的线性方程的技术。
1951年:矩阵计算的分解方法。数值线性代数的一组技术。
1957年:Fortran优化编译器。将高级代码转换为有效的计算机可读代码。
1959年:用于计算特征值的QR算法。另一个至关重要的矩阵运算变得迅速而实用。
1962年:用于排序的Quicksort算法。用于高效处理大型数据库。
1965年:快速傅立叶变换。也许是当今使用最广泛的算法,它将波形(如声音)分解为周期性分量。
1977年:整数关系检测。一种快速查找由看似无关的数字满足的简单方程式的快速方法。
1987年:快速多极方法。在解决n体计算的复杂性方面的突破,应用于从天体力学到蛋白质折叠的问题。
我个人将用PageRank替换整数关系检测。
如果我必须列出当今计算机中使用的前3个最重要的算法,我会说:
该二进制搜索算法就是不断用缩小的排序列表内的项目,大多数的索引查找将使用这些方针的东西在某些时候。该算法可在o(log n)时间内搜索有序列表。
在快速排序算法终于设法得到排序下降到为O(n log n)的平均情况,并为O(n ^ 2)最坏的情况。排序是计算机中最常见的数据任务之一,也是最昂贵的任务之一,改进平均案例排序是效率方面的巨大进步。
如前所述,Dijkstra算法在图形中的点之间产生最短路径。它广泛用于各种路由应用程序,最广泛地用于Internet本身,以确保使用经过缠结的互连路由器网的最快路径。
这是Python,Java 7和Android现在使用的排序算法
基本上:
N-1
完全在已排序的列表上)和美丽吗?很稳定!因此适合根据各种标准进行多遍分选。
顺便说一下,如果有人手头有优化的C ++实现...
对我而言,用于解决3D计算机动画中可见性问题的所有算法似乎都很关键。
画家的算法(也称为优先级填充)是3D计算机图形中可见性问题的最简单解决方案之一。将3D场景投影到2D平面上时,有必要确定哪些多边形可见,哪些多边形隐藏。
在计算机图形学中,z缓冲是对三维(3-D)图形中图像深度坐标的管理,通常在硬件中完成,有时在软件中完成。这是可见性问题的一种解决方案,可见性问题是确定渲染场景的哪些元素可见以及哪些元素被隐藏的问题。画家的算法是另一种常见的解决方案,尽管效率较低,但也可以处理非透明场景元素。Z缓冲也称为深度缓冲。
在3D计算机图形学中,隐藏表面确定(也称为隐藏表面去除(HSR),遮挡剔除(OC)或可见表面确定(VSD))是用于确定从某个角度看哪些表面和部分表面不可见的过程隐藏表面确定算法是解决可见性问题的方法,可见度问题是3D计算机图形学领域的第一个主要问题,隐藏表面确定过程有时被称为“隐藏”,这种算法有时被称为“隐藏器”线渲染的类似物是隐藏线去除,例如,需要隐藏表面来确定正确渲染图像的位置,以便在虚拟现实中无法看穿墙壁。
最初用于解码卷积纠错码,现已用于解决各种识别问题(从语音识别到生物信息学)。您可以在多个通信和存储设备中找到它。
Runge-Kutta数值积分。没有它,许多模拟将是不可能的。没有太空计划,没有核能,没有弹道系统,没有运动模拟,没有防弹背心,没有碰撞测试模拟,没有流体运动模拟,没有化学相互作用模拟,没有抗震建筑物……清单还在继续。
排序算法。
插入排序
易于实现,在小列表上非常快,并且在合并排序/快速排序实现中用于加速它们。它很稳定,并且可以在O(n)排序列表上(按升序排序时)。
口语和书面语言。
它们是当前将知识从一件事转移到另一件事的最有效算法之一。没有语言,公民社会就不会存在,信息也无法传达。
该堆的数据结构和其相关联的对堆建设和维护算法。
并表示对Quicksort的尊重。即使不是总是这样的选择,它也是计算机科学历史发展中的基本算法之一,并且是理解递归和算法分析的重要工具。它很漂亮,是的,我喜欢它。
MapReduce是划分,征服和并行处理大型数据集的一种方法。
气泡排序!
气泡排序不如Bogosort差。这就是为什么我投票支持Bubble的原因。