🟡一、什么是算法
算法是如何解决一类问题的明确规范,可以执行计算、数据处理、自动推理和其他任务。
️1.算法概念:
算法可以在有限的空间和时间内用定义明确的形式语言来表示,以计算函数。算法的一个典型例子是欧几里德算法,用于确定两个整数的最大公约数。在逻辑上,一个算法完成所需的时间是无法测量的,因为它与我们习惯的物理维度无关,这种不确定性导致无法找到既适合在某种意义上又适合抽象术语使用的算法定义。
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间,空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。
算法的五大特征
有穷性(Finiteness)
算法的有穷性是指算法必须能在执行有限个步骤之后终止;
确切性(Definiteness)
算法的每一步骤必须有确切的定义;
输入项(Input)
一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
输出项(Output)
一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
可行性(Effectiveness)
算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成(也称之为有效性)。
2.算法表达:
算法可用多种符号表示,包括自然语言、伪代码、流程图、drakon图表、编程语言或控制表。伪代码、流程图、drakon图表和控制表是表达算法的结构化方式,避免了自然语言语句中常见的许多歧义。编程语言主要用于以计算机可以执行的形式表达算法,但通常被用作定义或记录算法的一种方式。
3.计算机算法:
在计算机系统中,算法是软件开发人员用软件编写的逻辑实例, 使预定的“目标”计算机能够有效地从给定输入生成输出。一个最优算法,在旧硬件中运行,会比在更高效的硬件中运行的时间复杂度更高的算法产生更快的结果。
相信你也看过很多书上的定义,比如“算法是一组完成任务的指令”,“算法是操作数据的一组方法”。但是,你能举例说明吗?能让一个外行听明白吗?
它是什么
计算机算法,是指前人提炼出高效的、不断被验证过的标准流程。
举例说明
你去书店,要买一本《人生故事》,你用什么方式找到这本书呢?
方式1:一本本的去找,估计会累瘫在书店。
方式2:使用电脑查询一下书所在的编号,比如202015,202表示2楼第2个分区,015表示第15个书架。你到2楼找到02分区,第15个书架,很快就找到了那本书。
以上两种方式都是可以称为算法:
使用方式1的流程:能找到但是非常的慢,而且费力。
使用方式2的流程:能快速的找到且省力。因为使用了 麦尔威·杜威发明的很多国家都在使用的杜威十进制图书分类法。
那么我们就可以得出 好的算法又快又省事;
使用的时间少,就是要快。
消耗的资源少,就是要省。
总结:概括的说,算法就是解决问题的工具。在描述一个算法时,我们关注的是输入与输出。也就是说只要把原始数据和结果数据描述清楚了,那么算法所做的事情也就清楚了。我们在设计一个算法时也是需要先明确我们有什么和我们要什么,这一点相信大家在后面的文章中会慢慢体会到。
扩展:
算法本质是一个流程,与生活中的做事的流程类似。
生活中算法与计算机算法中的区别:比较计算机算法数时,需要考虑数据量特别特别大,大到近乎无穷大的情况。
因为,计算机的发明就是用于处理大量数据的。
我们需要学习前人的算法,避免重复造轮子,站在巨人的肩膀上前进,才能走的更远。
4.数据结构
数据结构(Data Structure)是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
数据结构定义
数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。记为:
Data_Structure=(D,R)
其中 D 是数据元素的集合,R 是该集合中所有元素之间的关系的有限集合。
数据结构具体指同一类数据元素中各元素之间的相互关系,包括三个组成成分,数据的逻辑结构、存储结构和数据运算结构。
数据的逻辑结构
数据的逻辑结构是指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。逻辑结构分为以下几种:
集合结构:数据元素同属一个集合,单个数据元素之间没有任何关系。
线性结构:数据结构中的元素存在一对一的相互关系。
树形结构:数据结构中的元素存在一对多的相互关系。
图形结构:数据结构中的元素存在多对多的相互关系。 作者:
**那么为什么算法经常会和数据结构一起出现呢?**这是因为对于同一个问题(如:排序),使用不同的数据结构来存储数据,对应的算法可能千差万别。所以在整个学习过程中,也会涉及到各种数据结构的使用。
常见的数据结构包括:数组、堆、栈、队列、链表、树等等。
5.算法的效率
算法效率是指算法执行的时间,算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。在现在的计算机硬件环境中,比较少需要考虑这个问题了,特别是pc机的编程,内存空间越来越大,所以被考虑得也越来越少,不过一个好的程序员,都应该对自己的程序有要求,每一个for比别人少一次判断1000个for就能够少掉很多的运行时间。所以能够理解,能够大概的去运用"效率度量"还是有很大意义的。
在我们日常开发中,一个算法设计完成后,还需要对算法的执行情况做一个评估。**一个好的算法,可以大幅度的节省运行的资源消耗和时间。**在进行评估时不需要太具体,毕竟数据量是不确定的,通常是以数据量为基准来确定一个量级,通常会使用到
时间复杂度和空间复杂度这两个概念。