Python Data Structure 简明教程

Python - Algorithm Classes

算法是明确的步骤,应该通过处理零个或多个输入向我们提供明确定义的输出。这导致了设计和编写算法的多种方法。已经观察到,大多数算法可以归类为以下类别。

Greedy Algorithms

贪婪算法尝试找到局部最优解,这最终可能会导致全局最优解。但是,贪婪算法通常不提供全局最优解。

因此,贪婪算法在此时刻寻找一个简单的解决方案,而无需考虑它如何影响未来的步骤。它类似于人类在不了解所提供输入的完整细节的情况下解决问题的方式。

大多数联网算法都采用贪婪方法。这里列出一些此类算法−

  1. Travelling Salesman Problem

  2. Prim 的最小生成树算法

  3. Kruskal 的最小生成树算法

  4. Dijkstra 的最小生成树算法

Divide and Conquer

此类算法涉及将给定问题分成较小的子问题,然后独立解决每个子问题。当问题无法进一步子划分时,我们开始合并每个子问题的解,以得出更大问题的解。

分而治之算法的重要示例有 −

  1. Merge Sort

  2. Quick Sort

  3. Kruskal 的最小生成树算法

  4. Binary Search

Dynamic Programming

动态规划涉及将较大的问题划分为较小的子问题,但与分而治之不同,它不涉及独立解决每个子问题。相反,它会记住较小子问题的结果,并将其用于相似或重叠的子问题。

大多数情况下,这些算法用于优化。在解决手头的子问题之前,动态算法会尝试检查以前解决的子问题的结果。动态算法的动机是对问题进行整体优化,而不是局部优化。

动态规划算法的重要示例有 −

  1. Fibonacci number series

  2. Knapsack problem

  3. Tower of Hanoi