📝 算法教程的设计与分析
41篇技术文档📅  最后修改于: 2021-01-12 03:28:50        🧑  作者: Mango
算法是解决问题的一系列步骤。算法的设计和分析对于设计算法以解决计算机科学和信息技术领域的不同类型的问题非常重要。本教程介绍了设计策略的基本概念,算法的复杂性分析,然后介绍了图论和排序方法方面的问题。本教程还包括有关复杂性理论的基本概念。本教程是为攻读任何计算机科学,工程和/或信息技术相关领域的学位的学生而设计的。它试图帮助学生掌握算法设计中涉及的基本概念。先决条件读者应具有编程和数学的基础知识。读...
📅  最后修改于: 2021-01-12 03:29:16        🧑  作者: Mango
算法是一组操作步骤,用于解决执行计算,数据处理和自动推理任务的问题。算法是一种可以在有限的时间和空间内表达的有效方法。算法是以非常简单和有效的方式表示特定问题的解决方案的最佳方法。如果我们有针对特定问题的算法,那么我们可以使用任何编程语言来实现它,这意味着该算法独立于任何编程语言。算法设计算法设计的重要方面包括创建有效的算法以使用最少的时间和空间以有效的方式解决问题。为了解决问题,可以采用不同的方...
📅  最后修改于: 2021-01-12 03:29:38        🧑  作者: Mango
在算法的理论分析中,通常在渐近意义上估计其复杂度,即,估计任意大输入的复杂度函数。术语“算法分析”由Donald Knuth创造。算法分析是计算复杂度理论的重要组成部分,它为解决特定计算问题所需的算法资源提供理论估计。大多数算法设计为可使用任意长度的输入。算法分析是确定执行算法所需的时间和空间资源。通常,算法的效率或运行时间表示为将输入长度与步数相关联的函数,称为时间复杂度,或者称为存储空间量,称...
📅  最后修改于: 2021-01-12 03:30:06        🧑  作者: Mango
为了衡量算法的资源消耗,使用了本章中讨论的不同策略。渐近分析函数f(n)的渐近行为是指随着n变大,f(n)的增长。通常,我们忽略n的较小值,因为我们通常对估算程序在大输入下的运行速度很感兴趣。一个好的经验法则是,渐近增长率越慢,算法越好。虽然并非总是如此。例如,线性算法$ f(n)= d * n + k $总是渐近地优于二次算法$ f(n)= cn ^ 2 + q $。求解递归方程递归是一个方程或...
📅  最后修改于: 2021-01-12 03:30:41        🧑  作者: Mango
在算法设计中,算法复杂度分析是必不可少的方面。主要地,算法复杂度关注其性能,其运行速度是多少。算法的复杂性根据处理数据所需的内存量和处理时间来描述算法的效率。从两个角度分析了算法的复杂性:时间和空间。时间复杂度该函数根据输入的大小来描述运行算法所需的时间。 “时间”可以表示执行的内存访问次数,整数之间的比较次数,某些内部循环执行的次数或与算法将占用的实时量相关的其他自然单位。空间复杂度该函数根据算...
📅  最后修改于: 2021-01-12 03:31:03        🧑  作者: Mango
在本章中,我们将讨论关于算法所需空间量的计算问题的复杂性。空间复杂度具有许多时间复杂度特征,并且可以作为根据问题的计算难度对问题进行分类的另一种方式。什么是空间复杂度?空间复杂度是一种函数,它根据算法的输入量来描述算法占用的内存(空间)量。我们经常说需要额外的内存,没有计算存储输入本身所需的内存。同样,我们使用自然的(但固定长度)单位来度量。我们可以使用字节,但是更容易使用,例如,使用的整数数量,...
📅  最后修改于: 2021-01-12 03:31:20        🧑  作者: Mango
本质上,许多算法都是递归的,可以递归地处理子问题来解决给定的问题。在分治法中,将一个问题分为较小的问题,然后独立解决较小的问题,最后将较小的问题的解决方案组合为较大的问题的解决方案。通常,分治算法分为三个部分-将问题分为多个子问题,这些子问题是同一问题的较小实例。通过递归解决子问题来解决它们。如果它们足够小,则将子问题作为基本案例解决。结合解决方案的子问题转化为原始问题的解决方案。分而治之方法的利...
📅  最后修改于: 2021-01-12 03:31:40        🧑  作者: Mango
让我们考虑一个可以通过分而治之的技术解决的简单问题。问题陈述算法分析中的最大-最小问题是在数组中找到最大值和最小值。解要在大小为n的给定数组number []中找到最大和最小数目,可以使用以下算法。首先,我们代表天真的方法,然后我们将提出分而治之的方法。天真的方法天真的方法是解决任何问题的基本方法。在这种方法中,最大数量和最小数量可以分别找到。为了找到最大和最小数目,可以使用以下简单算法。分析朴素...
📅  最后修改于: 2021-01-12 03:31:58        🧑  作者: Mango
在本章中,我们将讨论合并排序并分析其复杂性。问题陈述对数字列表进行排序的问题立即使其适用于分而治之的策略:将列表分为两半,递归地对每一半进行排序,然后合并两个已排序的子列表。解在此算法中,数字存储在数组number []中。在此,p和q表示子数组的开始和结束索引。分析让我们考虑一下,Merge-Sort的运行时间为T(n)。因此,$ T(n)= \ begin {cases} c&if \:n \...
📅  最后修改于: 2021-01-12 03:32:14        🧑  作者: Mango
在本章中,我们将讨论另一种基于分而治之的算法。问题陈述二进制搜索可以在排序的数组上执行。在这种方法中,确定元素x的索引是否该元素属于元素列表。如果数组未排序,则使用线性搜索来确定位置。解在此算法中,我们要查找元素x是否属于存储在数组number []中的一组数字。其中,l和r表示应在其中执行搜索操作的子数组的左右索引。分析线性搜索以O(n)时间运行。二进制搜索以O(log n)时间生成结果令T(n...
📅  最后修改于: 2021-01-12 03:32:34        🧑  作者: Mango
在本章中,我们将首先讨论矩阵乘法的一般方法,然后再讨论Strassen的矩阵乘法算法。问题陈述让我们考虑两个矩阵X和Y。我们想通过乘以X和Y来计算结果矩阵Z。天真的方法首先,我们将讨论朴素的方法及其复杂性。在这里,我们正在计算Z = X×Y。使用朴素方法,如果两个矩阵的顺序为p×q和q×r,则可以将两个矩阵(X和Y)相乘。以下是算法。复杂在这里,我们假设整数运算需要O(1)时间。此算法中有三个fo...
📅  最后修改于: 2021-01-12 03:32:52        🧑  作者: Mango
在所有算法方法中,最简单直接的方法是Greedy方法。在这种方法中,决策是基于当前可用信息进行的,而无需担心将来当前决策的影响。贪婪算法会逐个构建解决方案,以这种方式选择下一部分,从而立即获得收益。这种方法永远不会重新考虑以前的选择。该方法主要用于解决优化问题。贪婪方法在大多数情况下易于实现并且非常有效。因此,可以说,贪婪算法是一种基于启发式的算法范式,它在每一步都遵循局部最优选择,希望找到全局最...
📅  最后修改于: 2021-01-12 03:33:23        🧑  作者: Mango
使用称为背包问题的众所周知的问题,可以很好地理解贪婪算法。尽管可以通过采用其他算法方法来解决相同的问题,但贪婪方法可以在适当的时间内合理地解决分数阶背包问题。让我们详细讨论背包问题。背包问题给定一组项目,每个项目都有一个权重和一个值,请确定要包含在集合中的项目子集,以使总权重小于或等于给定的限制,并且总值尽可能大。背包问题在组合优化问题中。在现实世界中许多更复杂的数学模型中,它似乎是一个子问题。解...
📅  最后修改于: 2021-01-12 03:33:47        🧑  作者: Mango
问题陈述在工作排序问题中,目标是找到一系列工作,这些工作在其期限内完成并获得最大的利润。解让我们考虑,一组n分别与期限相关的,利润是赚了,如果作业被其限期完成给定的工作。需要以最大利润的方式订购这些工作。可能所有给定的工作可能都无法在其期限内完成。假设,第i个工作Ji的截止日期为di,而从该工作获得的利润为pi。因此,该算法的最优解是具有最大利润的可行解。因此,对于$ 1 \ leqslant i...
📅  最后修改于: 2021-01-12 03:34:10        🧑  作者: Mango
将一组不同长度的分类文件合并为一个分类文件。我们需要找到一个最佳解决方案,在该解决方案中,将在最短的时间内生成结果文件。如果给出了已排序文件的数量,则有许多方法可以将它们合并为一个已排序文件。可以成对执行此合并。因此,这种类型的合并称为2向合并模式。由于不同的配对需要不同的时间,因此在此策略中,我们希望确定将多个文件合并在一起的最佳方式。在每个步骤中,将合并两个最短的序列。合并一个p记录文件和一个...