A. 解决一个问题通常有多种方法,若说一个算法"有效"是指
C 算法效率是指算法执行的时间,算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。而度量一个程序的执行时间通常有两种方法*(一)事后统计的方法(二)事前分析估算的方法。
B. 矩形脉冲电流的有效值算法
矩形脉冲电流的有效值算法是指计算矩形脉冲电流的有效值的算法。有效值是指一个信号的平均值,它可以用来衡量信号的强度。矩形脉冲电流的有效值可以用下面的公式来计算:
I_eff = I_p/√2
其中,I_p是矩形脉冲电流的峰值值。
C. 广义地讲,为解决一个问题而采用的方法和步骤就称为
广义地讲,为了解决某一问题而采取的方法和步骤.就称之为算法.
计算机算法分为数值运算算法和非数值运算算法,数值运算的目的是求数值的解;非数值运算的应用范围十分广泛;目前,计算机在非数值运算方面的应用远远超过了在数值运算方面的作用。
怎样表示一个算法:
算法的表示方法有很多种,最常用到的方法有:用自然语言表示算法;用流程图表示算法;用N-S流程图表示算法;用伪代码表示算法和用计算机语言表示算法等
算法有三种基本结构:分别是顺序结构,选择结构和循环结构(分为“当”型和“直到”型)
D. 高中数学中,算法的步骤必须是明确和有效的,这句话怎么理解
意思就是每一个步骤要有理有据令信服,每一个结论都是要有明确的依据(包括各种定理、推论),每一个你使用的条件要么是题目所给要么由你自己推导出来,即有效的。
E. 什么事算法
计算机的算法具有可行性,有穷性、输入输出、确定性。
计算机算法特点
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)。
F. 如何评估一个算法的有效性
有效性?只要能满足输出项设定的算法都为有效算法。但是有效算法中尽量选最优算法。
结合算法的五大特性与回归到问题本身来看算法。
有穷性
确切性
输入项
输出项
可行性
满足这五点即为有效算法。
在算法执行的时候从空间和时间效率、正确性、可读性、健壮性角度来看算法本身是否是最优算法。
G. 时间复杂度及其计算
算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着 用系统的方法描述解决问题的策略机制 。对于同一个问题的解决,可能会存在着不同的算法,为了衡量一个算法的优劣,提出了<u>空间复杂度与时间复杂度</u>这两个概念。
一个算法是由 控制结构(顺序、分支和循环3种) 和 原操作(指固有数据类型的操作) 构成的,则算法时间取决于<u>两者的综合效果</u>。为了便于比较同一个问题的不同算法,通常的做法是:
<p>从算法中选取一种对于所研究的问题(或算法类型)来说是基本操作的原操作,以该基本操作的重复执行的次数作为算法的时间量度。</p>
参考文章: 算法的时间复杂度和空间复杂度-总结
时间复杂度,又称时间频度,即 一个算法执行所耗费的时间 。
<u>一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。</u>一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)
n称为 问题的规模 ,当n不断变化时,时间频度T(n)也会不断变化。一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,<i> 若有某个辅助函数f(n),使得当n趋近于无穷大时,*T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。简单来说,就是T(n)在n趋于正无穷时最大也就跟f(n)差不多大。</i>
算法中语句执行次数为一个常数,则时间复杂度为O(1)。常见的时间复杂度有:<p><b>常数阶O(1),对数阶O(log2n),线性阶O(n), 线性对数阶O(n log2n),平方阶O(n2),立方阶O(n3),...。</b></p>
<i><b>Log</b><u>2</u><b>8</b>:2为底N的对数,即2的几次方等于8,值为3</i>
常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(n log2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)
即:常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < 立方阶 < … < 指数阶 < 阶乘
如:
第一个for循环的时间复杂度为Ο(n),第二个for循环的时间复杂度为Ο(n2),则整个算法的时间复杂度为Ο(n1+n2+n3)=Ο(n3)。
Ο(1)表示基本语句的执行次数是一个常数,一般来说,只要算法中不存在循环语句,其时间复杂度就是Ο(1)。其中Ο(log2n)、Ο(n)、 Ο(nlog2n)、Ο(n2)和Ο(n3)称为多项式时间,而Ο(2n)和Ο(n!)称为指数时间。计算机科学家普遍认为前者(即多项式时间复杂度的算法)是有效算法。
<i>指数函数:y=ax,对数函数:y=logax,幂函数:y=xa
x为变量,a为常量</i>
H. 算法具有哪几个特征
算法是一种解决特定问题的方法和步骤的描述。通常来说,算法具有以下几个特征:
有穷性:算法必须在有限的时间内终止,否则将无限循环下去。
确定性:算法的每一步都必须是确定的,没有任何决策点。
可行性:算法必须是可行的,即它的每一步都必须是可以实现的。
有效性:算法必须是有效的,即它必须能够解决所规定的问题。
健壮性:算法必须是健壮的,即它必须能够适应输入数据的各种变化。
可读性:算法必须是可读的,即它必须能够被人类理解。
可维护性:算法必须是可维护的,即它必须能够被修改和改进。
可扩展性:算法必须是可扩展的,即它必须能够应对输入数据规模的增长。
可重复使用性:算法必须是可重复使用的,即它必须能够被用于解决多个不同的问题。
可复制性:算法必须是可复制的,即它必须能够被拷贝和重新使用。
希望这些信息对您有所帮助。