① 什么叫算法什么叫计算机算法
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。
特征
一个算法应该具有以下五个重要的特征:
有穷性(Finiteness)算法的有穷性是指算法必须能在执行有限个步骤之后终止;
确切性(Definiteness)算法的每一步骤必须有确切的定义;
输入项(Input)一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
输出项(Output)一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
可行性(Effectiveness)
算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。
例1:输入矩形的边长,计算并输出矩形面积
输入矩形的边长a和b
面积s=a*b
输出s的值,算法结束
例2:交换两个变量a和b的值
输入两个数a和b
t=a;
a=b;
b=t;
输出变量a和b的值,算法结束
例3:输入3个任意的整数,按从小到大的顺序输出这三个整数
输入三个数a、b和c
如果a>b,就交换a、b的值
如果a>c,就交换a、c的值
如果b>c,就交换b、c的值
输出a、b、c的值,算法结束
例4:输入一个正整数n,输出1+2+3+...+n的和
1)输入n的值
2)s=0;
3)i=1;
4)s=s+i;
5)如果i<n,则i=i+1,转步骤4)
6)输出s的值,算法结束
例5:输入两个正整数a和b,输出它们的最大公约数
1)输入两个数a和b
2)r=a%b;
3)如果r=0,转步骤7)
4)a=b;
5)b=r;
6)转步骤2)
7)输出b的值,算法结束
② 求计算机专业中的十大算法。。。qq827316329.。。。
不得不说,算法没有“十大”之类的东西的,不过的确有人对此进行过评选
《来自圣经的证明》收集了数十个简洁而优雅的数学证明,迅速赢得了大批数学爱好者的追捧。如果还有一本《来自圣经的算法》,哪些算法会列入其中呢?最近,有人在 StackExchange 上发起了提问,向网友们征集那些来自圣经的算法。众人在一大堆入围算法中进行投票,最终得出了呼声最高的五个算法:
第五名: BFPRT 算法
1973 年, Blum 、 Floyd 、 Pratt 、 Rivest 、 Tarjan 集体出动,合写了一篇题为 “Time bounds for selection” 的论文,给出了一种在数组中选出第 k 大元素的算法,俗称"中位数之中位数算法"。依靠一种精心设计的 pivot 选取方法,该算法从理论上保证了最坏情形下的线性时间复杂度,打败了平均线性、最坏 O(n^2) 复杂度的传统算法。一群大牛把递归算法的复杂度分析玩弄于骨掌股掌之间,构造出了一个当之无愧的来自圣经的算法。
第四名:快速排序
快速排序算法是 1960 年由英国计算机科学家 C.A.R. Hoare 发明的,是一种既高效又简洁的排序方法,现在已是学习算法的必修内容之一。快速排序的思想并不复杂,妙就妙在那个线性的数据分割过程,而真正最牛 B 的则是对整个算法的时间复杂度分析。我曾写过一个快速排序平均 O(n log n) 的证明,分析过程绝对值得欣赏。
第三名:并查集
严格地说,并查集是一种数据结构,它专门用来处理集合的合并操作和查询操作。并查集巧妙地借用了树结构,使得编程复杂度降低到了令人难以置信的地步;用上一些递归技巧后,各种操作几乎都能用两行代码搞定。而路径压缩的好主意,更是整个数据结构的画龙点睛之笔。并查集的效率极高,单次操作的时间复杂度几乎可以看作是常数级别;但由于数据结构的实际行为难以预测,精确的时间复杂度分析需要用到不少高深的技巧。
第二名: KMP 算法
KMP 算法是一种非常有效的字符串匹配算法,它告诉了人们一个有些反直觉的事实:字符串匹配竟然能在线性时间里完成!整个算法写成代码不足 10 行,但其中蕴含的天才般的奇妙思想让算法初学者们望而却步,而它的复杂度分析则更是堪称经典。
第一名:辗转相除法
辗转相除法是 Euclid 的《几何原本》中提到的一种寻找两个数的最大公因数的算法。无论是简洁的算法过程,还是深刻的算法原理,抑或是巧妙的复杂度分析,都称得上是来自圣经的算法。而扩展的辗转相除法则构造性地证明了,对任意整数 a 和 b ,存在一对 x 、 y 使得 ax + by = gcd(a, b) 。这一结论的普遍性和实用性让它成为了数论中的基本定理之一,在很多数学问题中都能看到它的身影。
③ 在计算机中,算法是指什么
算法(Algorithm)是对问题求解方法的精确描述
,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用
空间复杂度
与
时间复杂度
来衡量。
算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
一个算法应该具有以下五个重要的特征:
1、
有穷性
:
一个算法必须保证执行有限步之后结束;
2、
明确性
:
算法的每一步骤必须意义明确;
3、
输入
:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;
4、
输出
:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
5、
可执行性
:
所采用的算法必须能够在计算机上执行。
计算机科学家尼克劳斯-沃思曾着过一本着名的书《数据结构十算法=
程序》,可见算法在计算机科学界与计算机应用界的地位。
④ 计算机中算法的基本概念有哪些
计算机算法是以一步接一步的方式来详细描述计算机如何将输入转化为所要求的输出的过程,或者说,算法是对计算机上执行的计算过程的具体描述。一个算法必须具备以下性质:
(1)算法首先必须是正确的,即对于任意的一组输入,包括合理的输入与不合理的输入,总能得到预期的输出。如果一个算法只是对合理的输入才能得到预期的输出,而在异常情况下却无法预料输出的结果,那么它就不是正确的。
(2)算法必须是由一系列具体步骤组成的,并且每一步都能够被计算机所理解和执行,而不是抽象和模糊的概念。
(3)每个步骤都有确定的执行顺序,即上一步在哪里,下一步是什么,都必须明确,无二义性。
(4)无论算法有多么复杂,都必须在有限步之后结束并终止运行,即算法的步骤必须是有限的。在任何情况下,算法都不能陷入无限循环中。
一个问题的解决方案可以有多种表达方式,但只有满足以上4个条件的解才能称之为算法。
⑤ 计算机视觉领域主流的算法和方向有哪些
人工智能是当下很火热的话题,其与大数据的完美结合应用于多个场景,极大的方便了人类的生活。而人工智能又包含深度学习和机器学习两方面的内容。深度学习又以计算机视觉和自然语言处理两个方向发展的最好,最火热。大家对于自然语言处理的接触可能不是很多,但是说起计算机视觉,一定能够马上明白,因为我们每天接触的刷脸支付等手段就会和计算机视觉挂钩。可以说计算机视觉的应用最为广泛。
目标跟踪,就是在某种场景下跟踪特定对象的过程,在无人驾驶领域中有很重要的应用。目前较为流行的目标跟踪算法是基于堆叠自动编码器的DLT。语义分割,则是将图像分为像素组,再进行标记和分类。目前的主流算法都使用完全卷积网络的框架。实例分割,是指将不同类型的实例分类,比如用4种不同颜色来标记4只猫。目前用于实例分割的主流算法是Mask R-CNN。
⑥ 计算机的算法具有哪些特性
计算机的算法具有可行性,有穷性、输入输出、确定性。
计算机算法特点
1.有穷性。一个算法应包含有限的操作步骤,而不能是无限的。事实上“有穷性”往往指“在合理的范围之内”。如果让计算机执行一个历时1000年才结束的算法,这虽然是有穷的,但超过了合理的限度,人们不把他视为有效算法。
2. 确定性。算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。算法中的每一个步骤应当不致被解释成不同的含义,而应是十分明确的。也就是说,算法的含义应当是唯一的,而不应当产生“歧义性”。
3. 有零个或多个输入、所谓输入是指在执行算法是需要从外界取得必要的信息。
4. 有一个或多个输出。算法的目的是为了求解,没有输出的算法是没有意义的。
5.有效性。 算法中的每一个 步骤都应当能有效的执行。并得到确定的结果。
重要算法
A*搜寻算法
俗称A星算法。这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上。该算法像Dijkstra算法一样,可以找到一条最短路径;也像BFS一样,进行启发式的搜索。
Beam Search
束搜索(beam search)方法是解决优化问题的一种启发式方法,它是在分枝定界方法基础上发展起来的,它使用启发式方法估计k个最好的路径,仅从这k个路径出发向下搜索,即每一层只有满意的结点会被保留,其它的结点则被永久抛弃,从而比分枝定界法能大大节省运行时间。束搜索于20 世纪70年代中期首先被应用于人工智能领域,1976 年Lowerre在其称为HARPY的语音识别系统中第一次使用了束搜索方法。他的目标是并行地搜索几个潜在的最优决策路径以减少回溯,并快速地获得一个解。
二分取中查找算法
一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。这种搜索算法每一次比较都使搜索范围缩小一半。
Branch and bound
分支定界(branch and bound)算法是一种在问题的解空间树上搜索问题的解的方法。但与回溯算法不同,分支定界算法采用广度优先或最小耗费优先的方法搜索解空间树,并且,在分支定界算法中,每一个活结点只有一次机会成为扩展结点。
数据压缩
数据压缩是通过减少计算机中所存储数据或者通信传播中数据的冗余度,达到增大数据密度,最终使数据的存储空间减少的技术。数据压缩在文件存储和分布式系统领域有着十分广泛的应用。数据压缩也代表着尺寸媒介容量的增大和网络带宽的扩展。
Diffie–Hellman密钥协商
Diffie–Hellman key exchange,简称“D–H”,是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。
Dijkstra’s 算法
迪科斯彻算法(Dijkstra)是由荷兰计算机科学家艾兹格·迪科斯彻(Edsger Wybe Dijkstra)发明的。算法解决的是有向图中单个源点到其他顶点的最短路径问题。举例来说,如果图中的顶点表示城市,而边上的权重表示着城市间开车行经的距离,迪科斯彻算法可以用来找到两个城市之间的最短路径。
动态规划
动态规划是一种在数学和计算机科学中使用的,用于求解包含重叠子问题的最优化问题的方法。其基本思想是,将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。动态规划的思想是多种算法的基础,被广泛应用于计算机科学和工程领域。比较着名的应用实例有:求解最短路径问题,背包问题,项目管理,网络流优化等。这里也有一篇文章说得比较详细。
欧几里得算法
在数学中,辗转相除法,又称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。
最大期望(EM)算法
在统计计算中,最大期望(EM)算法是在概率(probabilistic)模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variable)。最大期望经常用在机器学习和计算机视觉的数据聚类(Data Clustering)领域。最大期望算法经过两个步骤交替进行计算,第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值;第二步是最大化(M),最大化在 E 步上求得的最大似然值来计算参数的值。M 步上找到的参数估计值被用于下一个 E 步计算中,这个过程不断交替进行。
快速傅里叶变换(FFT)
快速傅里叶变换(Fast Fourier Transform,FFT),是离散傅里叶变换的快速算法,也可用于计算离散傅里叶变换的逆变换。快速傅里叶变换有广泛的应用,如数字信号处理、计算大整数乘法、求解偏微分方程等等。
哈希函数
HashFunction是一种从任何一种数据中创建小的数字“指纹”的方法。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用来代表一个短的随机字母和数字组成的字符串。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。
堆排序
Heapsort是指利用堆积树(堆)这种数据结构所设计的一种排序算法。堆积树是一个近似完全二叉树的结构,并同时满足堆积属性:即子结点的键值或索引总是小于(或者大于)它的父结点。
归并排序
Merge sort是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
RANSAC 算法
RANSAC 是”RANdom SAmpleConsensus”的缩写。该算法是用于从一组观测数据中估计数学模型参数的迭代方法,由Fischler and Bolles在1981提出,它是一种非确定性算法,因为它只能以一定的概率得到合理的结果,随着迭代次数的增加,这种概率是增加的。该算法的基本假设是观测数据集中存在”inliers”(那些对模型参数估计起到支持作用的点)和”outliers”(不符合模型的点),并且这组观测数据受到噪声影响。RANSAC 假设给定一组”inliers”数据就能够得到最优的符合这组点的模型。
RSA加密算法
这是一个公钥加密算法,也是世界上第一个适合用来做签名的算法。今天的RSA已经专利失效,其被广泛地用于电子商务加密,大家都相信,只要密钥足够长,这个算法就会是安全的。
并查集Union-find
并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。
Viterbi algorithm
寻找最可能的隐藏状态序列(Finding most probable sequence of hidden states)。
⑦ 计算机算法指的是什么
计算机算法是以一步接一步的方式来详细描述计算机如何将输入转化为所要求的输出的过程,或者说,算法是对计算机上执行的计算过程的具体描述。
无论算法有多么复杂,都必须在有限步之后结束并终止运行;即算法的步骤必须是有限的。在任何情况下,算法都不能陷入无限循环中。算法必须是由一系列具体步骤组成的,并且每一步都能够被计算机所理解和执行,而不是抽象和模糊的概念。
算法首先必须是正确的,即对于任意的一组输入,包括合理的输入与不合理的输入,总能得到预期的输出。如果一个算法只是对合理的输入才能得到预期的输出,而在异常情况下却无法预料输出的结果,那么它就不是正确的。
(7)在计算机领域的算法扩展阅读
特点
1、有穷性。一个算法应包含有限的操作步骤,而不能是无限的。事实上“有穷性”往往指“在合理的范围之内”。如果让计算机执行一个历时1000年才结束的算法,这虽然是有穷的,但超过了合理的限度,人们不把他视为有效算法。
2、确定性。算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。算法中的每一个步骤应当不致被解释成不同的含义,而应是十分明确的。也就是说,算法的含义应当是唯一的,而不应当产生“歧义性”。
3、有零个或多个输入。所谓输入是指在执行算法是需要从外界取得必要的信息。
4、有一个或多个输出。算法的目的是为了求解,没有输出的算法是没有意义的。
5、有效性。 算法中的每一个 步骤都应当能有效的执行。并得到确定的结果。
⑧ 在计算机科学中,有哪些非常巧妙的算法
分支界定算法(Branch and Bound)——在多种最优化问题中寻找特定最优化解决方案的算法,特别是针对离散、组合的最优化。Buchberger算法——一种数学算法,可将其视为针对单变量最大公约数求解的欧几里得算法和线性系统中高斯消元法的泛化。
动态规划算法(Dynamic Programming)——展示互相覆盖的子问题和最优子架构算法
欧几里得算法(Euclidean algorithm)——计算两个整数的最大公约数。最古老的算法之一,出现在公元前300前欧几里得的《几何原本》。
期望-最大算法(Expectation-maximization algorithm,又名EM-Training)——在统计计算中,期望-最大算法在概率模型中寻找可能性最大的参数估算值,其中模型依赖于未发现的潜在变量。EM在两个步骤中交替计算,第一步是计算期望,利用对隐藏变量的现有估计值,计算其最大可能估计值;第二步是最大化,最大化在第一步上求得的最大可能值来计算参数的值
⑨ 计算机编程的算法是什么意思
算法,对应的英文单词是algorithm,这是一个很古老的概念,最早来自数学领域,是用于解决某一类问题的公式和思想。
计算机科学领域的算法,本质是一系列程序指令,用于解答特定的运算和逻辑问题。一般运用时间复杂度和空间复杂度来衡量算法好坏。
学习算法,不需要死记硬背那些冗长复杂的背景知识、底层原理、指令语法,需要做的事零五算法思想、理解算法对内存空间和性能的影响,以及开动脑筋去寻求解决问题的最佳方案。
数据结构是算法的基石,是数据的组织、管理和存储的格式,其目的是为了高效地访问和修改数据。数据结构的组成方式有:线性结构、树、图等。有了数据结构这个舞台,算法才可以尽情舞蹈,所以在学习算法之前最好先系统学习数据结构。在解决问题时,不同的算法会选用不同的数据结构。例如排序算法中的堆排序,利用的就是二叉堆这样一种数据结构。