在数学,计算机科学和其他相关理论中,该算法定义为一组既定且明确的规则,可以有条理地以有限的方式找到,可以执行计算,处理某些信息,提供问题的解决方案并进行各种活动。从初始状态和条目开始之后,按照要求的过程进行操作,就可以到达最终状态并获得结果。算法是查询算法的对象,尽管许多人可能不相信它,但它们也可以用于日常生活的各个方面。
什么是算法
目录
在计算中,通常将其定义为一系列顺序指令,其中执行一些过程以响应某些决策或需求。同样,算法经常在逻辑和数学中使用,并且是制定用户手册,说明性手册等的基础。在数学上最杰出的一种是归因于几何学家Euclides的方法,它可以实现正整数两个整数的最大公约数,并可以使用众所周知的“高斯方法”来确定线性方程组。
关于计算机科学,这种计算可以称为通过使用计算机来确定问题所遵循的准则顺序。
因此,算法学被理解为一门专注于算法分析和设计的学科。考虑到第一个方面,它试图检查诸如时间的正确性及其在时间和空间方面的有效性之类的属性,以了解可以通过算法解决的问题。至于第二个,它试图研究已经建立的范式并提出新的例子。
该算法位于计算进度的中心,在算法的不同领域都非常重要。这样,如果没有算法或专用数据结构的协作,像Facebook和Google这样成功的服务就不可能处理它们拥有的大量信息。但是,在日常生活中也使用算法,例如,火炉着火,因为它始于人们去厨房,观察它并在它点燃时结束的那一刻。 。
算法的特征
尽管该算法被称为导致问题解决的各种步骤的有限和有序集合,但据说这些困难的性质根据发现它们的上下文而有所不同,因此存在问题化学,数学,哲学等。因此,可以说其性质是变化的,并且不需要由计算机执行。除了前面解释的所有内容之外,算法还具有一些基本特征,这些特征可以确定它们目前的状态,并将在下面进行介绍。
- 算法中包含的准则必须是特定的,以避免为任何类型的混淆留有余地,这意味着必须适当遵循相应的说明,否则,您正在注册的流程的图形表示将不利于解决方案。正确。
- 它必须是完美的定义,尝试尽可能多地遵循它,以获取相同的结果,并且在相反的情况下,该算法将不可靠,并且不能作为决策的指导。
- 它们以有限性的特殊性而闻名,它们通常在某个点结束,然后在每个步骤的结尾产生结果。如果算法无限扩展,返回到某个永远无法解决的初始点,则说明存在悖论或众所周知的重复“循环”。
- 最后,据说算法的可读性是关键要素,因为如果它们的论点难以理解,就无法遵循相应的指令,此外,它还要求对每个文本中的文本进行直接,清晰和简洁的措辞。
算法部分
每个算法运算都有三个不同的部分,它们受系统的基本结构影响,分别是:
- 输入:也称为标头或起点,它是表示算法起源的初始指令,也是促使其阅读的指令。
- 流程:也称为声明,它是算法提供的精确说明,从根本上讲,它是编写指令的关键。
- 输出:在此最后阶段是算法确定的特定指令,例如其命令或分辨率。
算法实例
数学计算的常见示例包括加法2 + 3 = 5和减法15-9 = 6。可视化简单算法的另一种方法是在厨房食谱中,因为它们描述了特定而有序的过程,例如,“首先应将半锅水加热,然后再添加少许盐,最后胡椒粉将被切成种子和静脉。” 该模型呈现了一个开始,一个过程和一个结束,基本上定义了算法。
算法类型
在全世界存在的各种类型的算法中,重点放在根据符号系统分类的算法以及根据其功能分类的算法上。该算法基本上是解决任何特定问题的最著名的解决方案,根据其策略和功能,这些算法有不同类型,其中动态,反向,暴力,机会主义,标记非常突出。 ,随机等。除上述算法外,还有数千种适用于解决任何领域的难题的算法。
根据您的标志系统
定性和定量位于此类别中。
- 定性算法的特征是具有口头元素,这些元素的一个示例是口头授予的指令或公认的“逐步”,例如烹饪技术的食谱或执行手工作业的程序。
- 定量算法与定性算法完全相反,例如,当找到平方根或求解方程式时,由于存在某些数值元素并使用数学方法进行计算,因此定量算法与定性算法完全相反。
在该分类内,还存在计算和非计算算法。计算方法是使用计算机来进行的,其特征在于太复杂以至于需要执行机器,此外,它们是可以优化的定量算法。非计算的计算机没有义务通过机器或计算机执行;一个明显的例子就是电视机的编程。
根据其功能
以下是此分类中的内容。
1.标记算法
其特点是使用自动化以勤奋的方式设定价格,关注诸如用户行为等因素,并且也被称为自动确定价格以贬值组件以增加用户利润的能力。卖家。自1990年代初以来,它在航空业的惯例中发挥了非常重要的作用。
标记算法的特征是竞争激烈的行业中最常见的实践之一,涉及旅行社或那些在线机构。这种算法可能变得极其复杂或相对简单,因为在许多情况下,它们会随着某些测试的连续性而被优化或自学。除此之外,由于个人倾向于同时兼顾稳定性和公平性,因此标记算法也不会受到客户的欢迎。
2.概率算法
它们是获得结果的方式取决于概率的方法,通常称为随机算法。
在一些应用中,这种类型的操作的处理是常见的,例如,当随时间推移对任何现有或设计的系统的行为进行仿真时,结果会得到偶然的解决方案。在其他情况下,必须解决的问题通常是确定性的,但可以通过应用概率算法将其转换为偶然的问题。随机数的优点在于它的应用不需要高度复杂的数学研究。
此外,在这一组中,有三种主要的数值类型,即蒙特卡洛(Monte Carlo)和拉斯维加斯(Las Vegas)。
- 数值算法可以提供问题的近似结果,并且通常在工程中应用。
- 蒙特卡洛算法可以给出正确或错误的解决方案,并具有一定的误差余量。
- 拉斯维加斯算法的特点是永远不会留下错误的答案,实际上,它们会找到正确的解决方案,或者只是将可能的失败告知您。
动态编程是指算法计算结果的方法。有时,有问题的某些元素的解决方案取决于其他较小问题的结果。因此,要解决这些问题,必须重新计算相同的值才能解决最小的子问题,但是这会造成循环浪费。为了解决这个问题,可以使用动态编程,在这种情况下,请记住每个子问题的解决方案,以使用相同的值而不是重复多次。
3.启发式算法
它们通过找到解决方案来区分,即使如此,它们也不保证将找到最佳答案,因此,可以将它们视为近似算法。当认为无法通过常规途径找到解决方案时,可以使用这些方法。启发式方法提供了将在下面解释的用途。在计划中,它们用于在短时间内安排活动,在设计中,它们用于描述电气或数字系统,在仿真中,它们用于验证某些程序。
4.回溯算法
它们被称为递归策略,用于解决诸如难题,迷宫或类似碎片之类的问题,在其中进行深入搜索以找到可能的解决方案。它的名称指的是这样的事实,即在进行查询以查找结果时,它始终可以追溯到上一步,以便能够测试替代方法。通常撤消这些措施,以观察其对经济,市场,价格标记,某些运营甚至社会本身的影响。
5.贪婪算法
它被称为“破坏者”或“爱吃甜食”,适用于优化问题,在该算法的每个步骤中,都做出了合理且最佳的选择,以最终获得最佳的全局解决方案。但是,必须考虑到,一旦做出判断,将来绝对无法进行任何纠正或更改。该操作具有此名称,因为在每个步骤中都选择了可以“吞咽”的最佳部分,而不必担心以后会发生什么。
算法的属性
许多作者试图在使用数学模型时以正式的方式定义算法。但是,这些标本与特殊类型的信息密切相关,包括数字,符号和一些图形,同时还要处理大量数据。通常,每个定义的共同参与归纳为以下三个属性:
问题陈述
借助于计算机的问题解决可以包括描述问题的过程,并且允许开发能够解决该问题的程序。此过程需要分析问题,设计算法并将其转换为程序,以及其性能和验证。前两个步骤是此过程中最复杂的步骤,但是一旦您检查了问题并找到了可以解决问题的算法,您的任务就主要基于将其转换为所需的编程语言。
总体解决方案分析
定义问题后,就该分析以下内容:
- 的信息,他们提供给我们的门票。
- 预期的结果。
- 工作,陈述或其他必要元素的领域。
算法分析是更广泛的计算复杂性理论中最重要的部分,因为它为任何算法解决给定的计算问题所需的资源提供了理论计算。在进行理论研究时,通常在渐近的意义上计算其复杂度以获得足够大的输入量。渐近上限与theta和Ω表示法一起用于此目的,应注意的是,非渐进量度可以计算机化。
准确的效率度量对实际使用算法的人非常有用,因为它们具有更高的精度,这使他们可以确定执行时间。对于某些个人,例如视频游戏创作者,隐藏的常数可能意味着成功与失败之间的巨大差异。时间评估可能取决于特定步骤的定义方式,为了使分析有意义,必须确保时间明显受常数限制。
阐述算法
为了开展一项业务,重要的是要执行一系列程序来解决问题本身。首先,必须先对难度进行分析,并通过一项研究证明这一问题的真正作用,而这项研究早在执行任何算法之前就已经完成。因此,需要评估需求的定义,在这一步中,您必须对要解决的问题有清晰的认识,例如两个数字的总和,数字列表的排序等。
以后,执行模块的相应标识,因为算法的正确实现依赖于该算法来为上述要求提供可能的解决方案。
最终,以计算机可以理解的编程语言来实现计算,以便它能够理解其建模的指令,从而能够执行它们,从而达到预期的结果。在最后一个过程中,可以说一个程序,该程序由一系列指令组成,这些指令一个接一个地排序,并设法解决已建立的要求。
重要的是要提到,在顺序时间内,这些算法在离散时间内执行其功能,并试图定义被认为有效的每个输入中的计算状态序列。在抽象状态下,这些操作是独立的元素,可以认为在同构下,原始顺序结构可以变得不变。在有界探索中,从一种状态到另一种状态的过渡是通过永久性的有限解释完全建立的,其中在一个状态和下一个状态之间,仅考虑了当前状态的有限数量的项。
算法通常通过“伪代码”编程语言,常用语言甚至是众所周知的流程图表示,也不应忽略。同样,值得一提的是,由于算法将数据表示为比特序列,因此它们在计算中起着基本作用。从另一个角度讲,程序被定义为一种算法,它向计算机表达了为充分完成某些活动而必须遵循的特定步骤。另一方面,学习编写伪代码使编程更容易,因此将在后面进行解释。
编程语言被称为形式语言或人工语言,因为它们具有定义良好的语法规则,它能够为程序员提供以算法形式将一系列指令或规则序列文本化的功能,从而达到目的为了保持对计算机的物理和逻辑行为的控制,以这种方式,可以获取各种类型的信息。通过编程语言编写的这组规则称为程序。
编程语言通常由一组符号以及语法和语义规则组成,这些规则定义了语言的当前结构及其含义。从另一个角度看,计算机语言还包括编程语言,HTML就是一个明显的例子,HTML是一种可以执行某些指令以执行不同文档内容的语言。编程语言可以精确规定必须在各种情况下由特定软件操作的那些数据。
另一方面,伪代码是一种算法描述语言,使用的是真实编程语言的基本约定,但旨在供人类阅读而不是通过机器进行阅读,从而与任何其他类型的语言保持独立编程语言。伪代码会忽略对人类理解算法不重要的细节,例如系统代码,变量声明,甚至某些子例程。通过这种方式,编程语言试图以自然语言的精确描述或紧凑的数学符号来补充自身。