算法设计技术

算法设计技术

算法是一种针对有限大小的输入以有限数量的步骤解决特定问题的过程。

技术开发 编程 技术框架 技术发展

 

算法设计技术

算法是一种针对有限大小的输入以有限数量的步骤解决特定问题的过程。

什么是算法? 

算法是一种针对有限大小的输入以有限数量的步骤解决特定问题的过程。 

可以以各种方式对算法进行分类。他们是: 

  • 实施方法

  • 设计方法

  • 其他分类

本文讨论了每种分类方法中的不同算法。 

按实现方法分类:在这种分类中,可以将算法命名为三个主要类别。他们是: 

  • 递归或迭代:甲递归算法是直到碱条件实现,而迭代算法使用连连调用自身的算法循环和/或数据结构等栈,队列解决任何问题。每个递归解决方案都可以实现为迭代解决方案,反之亦然。 

    示例: 河内塔以递归方式实现,而股票跨度问题则以迭代方式实现。

  • 精确或近似:能够为任何问题找到最佳解决方案的算法称为精确算法。对于所有这些问题,无法找到最优化的解决方案,则使用一种近似算法。近似算法是将结果作为问题的子结果的平均结果找到的算法类型。 

    示例:对于NP-Hard问题,使用近似算法。排序算法是精确的算法。

  • 串行算法,并行算法或分布式算法:在串行算法中,一次执行一条指令,而并行算法是将问题分为子问题并在不同处理器上执行的算法。如果并行算法分布在不同的计算机上,则它们称为分布式算法。

按设计方法分类:在这种分类中,可以将算法命名为三个主要类别。他们是: 

  • 贪婪法:在贪婪法中,每一步都决定选择局部最优,而不考虑未来的后果。 

    示例:小 背包,活动选择。

  • 分而治之:将分而治之的策略包括将问题分为子问题,递归地解决这些问题,然后重新组合他们最后的答案。 

    例如: 归并排序,快速排序。

  • 动态规划:的方法动态编程相似,分而治之。区别在于,只要我们具有相同结果的递归函数调用,便不再尝试再次调用它们,而是尝试将结果存储在表形式的数据结构中并从表中检索结果。因此,降低了整体时间复杂度。“动态”是指我们动态决定是调用函数还是从表中检索值。 

    示例: 0-1背包,子集和问题。

  • 线性编程:在线性编程中,在输入和最大化或最小化输入的某些线性函数方面存在不等式。 

    示例:有向图的最大流量

  • 归约(变换和征服):在这种方法中,我们通过将一个困难的问题转化为已知的问题来解决,该问题具有最佳的解决方案。基本上,目标是找到一种简化算法,其复杂度不受最终的简化算法支配。 

    示例:用于在列表中查找中间值的选择算法包括首先对列表进行排序,然后在排序后的列表中找出中间元素。这些技术也称为变换和征服。

其他分类:除了将算法分类为上述大类之外,该算法还可以分类为其他大类,例如: 

  • 随机算法:为更快的解决方案做出随机选择的算法称为随机算法。 

    示例: 随机Quicksort算法。

  • 按复杂度分类:根据获得输入大小的任何问题的解决方案所花费的时间对算法进行分类。这种分析称为时间复杂度分析。 

    示例:某些算法使用O(n),而另一些则花费指数时间。

  • 按研究领域分类:在CS中,每个领域都有其自身的问题,需要高效的算法。 

    示例:排序算法,搜索算法,机器学习等。

  • 分支和边界枚举和回溯:这些主要用于人工智能。

技术开发 编程 技术框架 技术发展