算法工程
目录
算法工程
算法工程专注于计算机算法的设计、分析、实现、优化、剖析和实验评估,弥补了软件工程中算法理论和实际应用之间的差距。它是一种算法研究的一般方法。
与算法理论的区别
算法工程并不打算取代或与算法理论竞争,而是试图用实验算法(也称为经验算法)来丰富、完善和加强其正式方法。这样,它就可以在以下情况下为算法的效率和性能提供新的见解手头的算法不太适合于算法理论分析,形式分析悲观地提出了不太可能出现在实际兴趣的输入上的界限,算法依赖于现代硬件架构的复杂性,如数据定位、分支预测、指令停滞、指令延迟,而算法理论中使用的机器模型无法捕获所需的细节,需要确定具有不同恒定成本和渐近行为的竞争算法之间的交叉。方法论一些研究者将算法工程的方法论描述为由算法设计、分析、实现和实验评估组成的循环,并加入了机器模型或现实输入等进一步的内容。他们认为,将算法工程等同于实验算法学的做法过于局限,因为将设计和分析、实现和实验视为独立的活动,忽略了算法工程中这些要素之间的关键反馈回路。
现实的模型和真实的输入
虽然具体的应用是在算法工程的方法论之外,但它们在塑造问题和底层机器的现实模型方面发挥着重要作用,并为实验提供真实的输入和其他设计参数。
算法工程的设计
与通常专注于算法的渐进行为的算法理论相比,算法工程师需要牢记进一步的要求。此外,算法的常数因素对现实世界的输入有相当大的影响,有时由于常数因素较低,具有较差的渐进行为的算法在实践中表现得更好。
算法工程的分析
有些问题可以用启发式算法和随机式算法来解决,比确定性算法更简单、更有效。不幸的是,这使得即使是简单的随机算法也很难分析,因为有一些微妙的依赖关系需要考虑到。

算法工程的实施
理论见解、制定的算法、编程语言和硬件之间巨大的语义差距对甚至简单算法的有效实施构成了挑战,因为小的实施细节会对执行行为产生涟漪效应。比较算法的几种实施的xxx可靠方法是花相当多的时间进行调整和分析,在多种架构上运行这些算法,并查看生成的机器代码。实验见。实验算法学
应用工程
用于实验的算法的实现与可用于应用的代码有很大的不同。前者优先考虑快速的原型设计、性能和实验过程中的测量仪器,后者需要彻底的测试、可维护性、简单性和对特定类别的输入进行调整。