5大算法
① 算法是什么急!!!!
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
解析:
算法 Algorithm
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。
一个算法应该具有以下五个重要的特征:
1、有穷性: 一个算法必须保证执行有限步之后结束;
2、确切性: 算法的每一步骤必须有确切的定义;
3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;
4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。
算法的设计要求
1)正确性(Correctness)
有4个层次:
A.程序不含语法错误;
B.程序对几组输入数据能够得出满足规格要求的结果;
C.程序对精心选择的、典型的、苛刻的、带有刁难性的几组输入数据能够得出满足规格要求的结果;
D.程序对一切合法的输入数据都能产生满足规格要求的结果。
2)可读性(Readability)
算法的第一目的是为了阅读和交流;
可读性有助于对算法的理解;
可读性有助于对算法的调试和修改。
3)高效率与低存储量
处理速度快;存储容量小
时间和空间是矛盾的、实际问题的求解往往是求得时间和空间的统一、折中。
算法的描述 算法的描述方式(常用的)
算法描述 自然语言
流程图 特定的表示算法的图形符号
伪语言 包括程序设计语言的三大基本结构及自然语言的一种语言
类语言 类似高级语言的语言,例如,类PASCAL、类C语言。
算法的评价 算法评价的标准:时间复杂度和空间复杂度。
1)时间复杂度 指在计算机上运行该算法所花费的时间。用“O(数量级)”来表示,称为“阶”。
常见的时间复杂度有: O(1)常数阶;O(logn)对数阶;O(n)线性阶;O(n^2)平方阶
2)空间复杂度 指算法在计算机上运纯和行所占用的存储空间。度量同时间复杂度。
时间复杂度举例
(a) X:=X+1 ; O(1)
(b) FOR I:=1 TO n DO
X:= X+1; O(n)
(c) FOR I:= 1 TO n DO
FOR J:= 1 TO n DO
X:= X+1; O(n^2)
“算法”一词最早来自公元 9世纪 波斯数学家比阿勒·霍瓦里松的一本影响深远的着作《代数对话录》。20世纪的 英国 数学家 图灵 提出了着名的图灵论点,并抽象出了一台机器,这台机器被我们称之为 图灵机 。图灵的思想对算法的发展起到了重要的作用。
算法是 计算机 处理信息的本质,因为 计算机程序 本质上是一个算法,告诉计算机确切的步骤来执行一个指定的任务,如计算职工的薪水或打印学生的成绩单。 一般地,当算法在处理信息时,数据会从输入设备读取,写入输出设备,可能保存起来以供以后使用侍销。
这是算法的一个简单的例子。
我们有一串随机数列。我们的目的是找到这个数列中最大的数。如果将数列中的每一个数字看成是一颗豆子的大老裤游小 可以将下面的算法形象地称为“捡豆子”:
首先将第一颗豆子(数列中的第一个数字)放入口袋中。
从第二颗豆子开始检查,直到最后一颗豆子。如果正在检查的豆子比口袋中的还大,则将它捡起放入口袋中,同时丢掉原先的豆子。 最后口袋中的豆子就是所有的豆子中最大的一颗。
下面是一个形式算法,用近似于 编程语言 的 伪代码 表示
给定:一个数列“list",以及数列的长度"length(list)" largest = list[1] for counter = 2 to length(list): if list[counter] > largest: largest = list[counter] print largest
符号说明:
= 用于表示赋值。即:右边的值被赋予给左边的变量。
List[counter] 用于表示数列中的第 counter 项。例如:如果 counter 的值是5,那么 List[counter] 表示数列中的第5项。
<= 用于表示“小于或等于”。
算法的分类
(一)基本算法 :
1.枚举
2.搜索:
深度优先搜索
广度优先搜索
启发式搜索
遗传算法
(二)数据结构的算法
(三)数论与代数算法
(四)计算几何的算法:求凸包
(五)图论 算法:
1.哈夫曼编码
2.树的遍历
3.最短路径 算法
4.最小生成树 算法
5.最小树形图
6.网络流 算法
7.匹配算法
(六)动态规划
(七)其他:
1.数值分析
2.加密算法
3.排序 算法
4.检索算法
5.随机化算法
② 五大基本算法——回溯法
回溯法是一种选优搜索法(试探法)。
基本思想:将问题P的状态空间E表示成一棵高为n的带全有序树T,把求解问题简化为搜索树T。搜索过程采用 深度优先搜索 。搜索到某一结点时判断该结点是否包含原问题的解,如果包含则继续往下搜索,如果不包含则向祖先回溯。
通俗来说,就是利用一个树结构来表示解空间,然后从树的根开始深度优先遍历该树,到不满足要求的叶子结点时向上回溯继续遍历。
几个结点:
扩展结点:一个正在产生子结点的结点称为扩展结点
活结点:一个自身已生成但未全部生成子结点的结点
死结点:一个所有子结点已全部生成的结点
1、分析问题,定义问题解空间。
2、根据解空间,确定解空间结构,得 搜索树 。
3、从根节点开始深度优先搜索解空间(利用 剪枝 避免无效搜索)。
4、递归搜索,直到找到所要求的的解。
1、子集树
当问题是:从n个元素的集合S中找出满足某种性质的子集时,用子集树。
子集树必然是一个二叉树。常见问题:0/1背包问题、装载问题。
遍历子集树时间复杂度:O(2^n)
2、排列树
当问题是:确定n个元素满足某种排列时,用排列数。常见问题:TSP旅行商问题,N皇后问题。
遍历排列树时间复杂度:O(n!)
通俗地讲,结合Java集合的概念,选择哪种树其实就是看最后所得结果是放入一个List(有序)里,还是放入一个Set(无序)里。
剪枝函数能极大提高搜索效率,遍历解空间树时,对于不满足条件的分支进行剪枝,因为这些分支一定不会在最后所求解中。
常见剪枝函数:
约束函数(对解加入约束条件)、限界函数(对解进行上界或下界的限定)
满足约束函数的解才是可行解。
1、0/1背包问题
2、TSP旅行商问题
3、最优装载问题
4、N-皇后问题
具体问题可网络详细内容。
③ 大数据挖掘的算法有哪些
大数据挖掘的算法:
1.朴素贝叶斯,超级简单,就像做一些数数的工作。如果条件独立假设成立的话,NB将比鉴别模型收敛的更快,所以你只需要少量的训练数据。即使条件独立假设不成立,NB在实际中仍然表现出惊人的好。
2. Logistic回归,LR有很多方法来对模型正则化。比起NB的条件独立性假设,LR不需要考虑样本是否是相关的。与决策树与支持向量机不同,NB有很好的概率解释,且很容易利用新的训练数据来更新模型。如果你想要一些概率信息或者希望将来有更多数据时能方便的更新改进模型,LR是值得使用的。
3.决策树,DT容易理解与解释。DT是非参数的,所以你不需要担心野点(或离群点)和数据是否线性可分的问题,DT的主要缺点是容易过拟合,这也正是随机森林等集成学习算法被提出来的原因。
4.支持向量机,很高的分类正确率,对过拟合有很好的理论保证,选取合适的核函数,面对特征线性不可分的问题也可以表现得很好。SVM在维数通常很高的文本分类中非常的流行。
如果想要或许更多更详细的讯息,建议您去参加CDA数据分析课程。大数据分析师现在有专业的国际认证证书了,CDA,即“CDA 数据分析师”,是在数字经济大背景和人工智能时代趋势下,面向全行业的专业权威国际资格认证, 旨在提升全民数字技能,助力企业数字化转型,推动行业数字化发展。 “CDA 数据分析师”具体指在互联网、金融、零售、咨询、电信、医疗、旅游等行业专门从事数据的采集、清洗、处理、分析并能制作业务报告、 提供决策的新型数据分析人才。点击预约免费试听课。
④ 五种进程调度算法的总结;
1、时间片轮转调度 算法 (RR):给每个进程固定的执行时间,根据进程到达的先后顺序让进程在单位时间片内执行,执行完成后便调度下一个进程执行,时间片轮转调度不考虑进程等待时间和执行时间,属于抢占式调度。优点是兼顾长短作业;缺点是平均等待时间较长,上下文切换较费时。适用于分时系统。
2、先来先服务调度算法(FCFS):根据进程到达的先后顺序执行进程,不考虑等待时间和执行时间,会产生饥饿现象。属于非抢占式调度,优点是公平,实现简单;缺点是不利于短作业。
3、优先级调度算法(HPF):在进程等待队列中选择优先级最高的来执行。
4、多级反馈队列调度算法:将时间片轮转与优先级调度相结合,把进程按优先级分成不同的队列,先按优先级调度,优先级相同的,按时间片轮转。优点是兼顾长短作业,有较好的响应时间,可行性强,适用于各种作业环境。
5、高响应比优先调度算法:根据“响应比=(进程执行时间+进程等待时间)/ 进程执行时间”这个公式得到的响应比来进行调度。高响应比优先算法在等待时间相同的情况下,作业执行的时间越短,响应比越高,满足段任务优先,同时响应比会随着等待时间增加而变大,优先级会提高,能够避免饥饿现象。优点是兼顾长短作业,缺点是计算响应比开销大,适用于批处理系统。
⑤ 写字楼市场总需求计算公式
1.总潜在市场(TAM):是指一款产品或服务在现有市场上真正的潜在可以达到的市场规模,或者说你希望产品未来希望覆盖的消费者人群规模。
2.可服务市场(SAM):即你的产品可以的覆盖人群。
3.可获得服务市场(SOM):即你的产品实际可以服务到的市场范围,这要考虑到竞争、地区、分发、销售渠道等其他市场因素。
通常遇到Market Size的问题,都是对潜在市场(TAM)进行估算。以此来评估某个产品或项目,在某个时间区间内,可能真正可以达到的潜在市场规模。
接下来我们就展开讲讲,如何估算在一个时间和空间尺度下,某个真正可能达到的潜在市场规模的大小。
一、5种算法
市场容量的估计,总体上有两个角度,分别是:
自上而下(Top down)
自下而上(Bottom up)
Top down里又包含3种算法,Bottom up里包含2种算法,一共5种算法:
二、自上而下 Top down
1、大市场推算法
大市场推算法,通常是确定目标市场,从目标市场更大的上一级市场往下推算的方式。上一级市场,既可以是区域意义上的,也可以是行业意义上的。
这样的推算通常适合上一级市场规模更易获取数据和进行估算,并且大市场和小市场份额相对稳定或者份额变动易知的情况。
例如,从全球市场规模,推算到亚太市场规模,再推算到中国市场规模。
例如,从整个汽车市场的规模,推算到电动汽车市场的总规模。
2、关联数据推算法
关联数据,指的是和目标市场发展的相关性较高的数据,通常是宏观数据,例如出生率、总人口、GDP、进出口总额等,通过与这些高相关易获得的宏观数据,进行回归分析,实现预测。
例如,跨境电商的出货量,和进出口总额息息相关,获得进出口总额的发展趋势,也就能估算跨境电商的发展趋势。
3、同类搜衫对标法
在市场发展的过程中,已经存在例如美国、欧洲、日本等市场类似的发展路径时期的规模,以此为据进行估算。
估算逻辑如下:
目标行业市场世悉腔规模 =对标同类市场规模 /对标同类关联数据 *目标行业关联数据
例如,估算2025年国内出境旅游人次,出境旅游和人均GDP水平相关。通过对标,美国人均GDP和出境旅游人次的数据,以此来估算国内的相关发展。
三、自下而上 Bottom up
1、细分市场加总法
细分市场,是指不同的细分领域加总在一起。通常适用于市场内产品基本可穷举,并且能够获得精准的数据。
估算逻辑如下:
目标行业市陆余场规模=∑目标行业细分市场规模
例如,估算2025年中国汽车的销售额 = 燃油车销售额+油电混合车销售额+电动车销售额。
每个细分市场的销售额,都是销量*平均单价,销量可以根据目前的销量和发展趋势进行估算。
∑销售额 = ∑销量*平均单价=∑目前销量*(1+发展趋势)*平均单价
2、需求渗透率分解法
根据产品的目标人群的需求出发,来测算目标市场的规模。适用于估算大市场,或者没有明显可替代品的市场。
⑥ 大数据经典算法解析(5)一EM算法
姓名:崔升 学号:14020120005
【嵌牛导读】:
EM作为一种经典的处理大数据的算法,是我们在学习互联网大数据时不得不去了解的一种常用算法
【嵌牛鼻子】:经典大数据算法之EM简单介绍
【嵌牛提问】:EM是一种怎么的算法,其如何去观测其中隐变量的?
【嵌牛正文】:
1. 极大似然
极大似然(Maximum Likelihood)估计为用于已知模型的参数估计的统计学方法。比如,我们想了解抛硬币是正面(head)的概率分布θθ;那么可以通过最大似然估计方法求得。假如我们抛硬币1010次,其中88次正面、22次反面;极大似然估计参数θθ值:
θ^=argmaxθl(θ)=argmaxθθ8(1−θ)2θ^=argmaxθl(θ)=argmaxθθ8(1−θ)2
其中,l(θ)l(θ)为观测变量序列的似然函数(likelihood function of the observation sequence)。对l(θ)l(θ)求偏导
∂l(θ)∂θ=θ7(1−θ)(8−10θ)⇒θ^=0.8∂l(θ)∂θ=θ7(1−θ)(8−10θ)⇒θ^=0.8
因为似然函数l(θ)l(θ)不是凹函数(concave),求解极大值困难。一般地,使用与之具有相同单调性的log-likelihood,如图所示
凹函数(concave)与凸函数(convex)的定义如图所示:
从图中可以看出,凹函数“容易”求解极大值,凸函数“容易”求解极小值。
2. EM算法
EM算法(Expectation Maximization)是在含有隐变量(latent variable)的模型下计算最大似然的一种算法。所谓隐变量,是指我们没有办法观测到的变量。比如,有两枚硬币A、B,每一次随机取一枚进行抛掷,我们只能观测到硬币的正面与反面,而不能观测到每一次取的硬币是否为A;则称每一次的选择抛掷硬币为隐变量。
用Y表示观测数据,Z表示隐变量;Y和Z连在一起称为完全数据( complete-data ),观测数据Y又称为不完全数据(incomplete-data)。观测数据的似然函数:
P(Y|θ)=∑ZP(Z|θ)P(Y|Z,θ)P(Y|θ)=∑ZP(Z|θ)P(Y|Z,θ)
求模型参数的极大似然估计:
θ^=argmaxθlogP(Y|θ)θ^=argmaxθlogP(Y|θ)
因为含有隐变量,此问题无法求解。因此,Dempster等人提出EM算法用于迭代求解近似解。EM算法比较简单,分为两个步骤:
E步(E-step),以当前参数θ(i)θ(i)计算ZZ的期望值
Q(θ,θ(i))=EZ[logP(Y,X|θ)|Y,θ(i)]Q(θ,θ(i))=EZ[logP(Y,X|θ)|Y,θ(i)]
M步(M-step),求使Q(θ,θ(i))Q(θ,θ(i))极大化的θθ,确定第i+1i+1次迭代的参数的估计值θ(i+1)θ(i+1)
θ(i+1)=argmaxθQ(θ,θ(i))θ(i+1)=argmaxθQ(θ,θ(i))
如此迭代直至算法收敛。关于算法的推导及收敛性证明,可参看李航的《统计学习方法》及Andrew Ng的《CS229 Lecture notes》。 这里 有一些极大似然以及EM算法的生动例子。
3. 实例
[2]中给出极大似然与EM算法的实例。如图所示,有两枚硬币A、B,每一个实验随机取一枚抛掷10次,共5个实验,我们 可以 观测到每一次所取的硬币,估计参数A、B为正面的概率θ=(θA,θB)θ=(θA,θB),根据极大似然估计求解
如果我们 不能 观测到每一次所取的硬币,只能用EM算法估计模型参数,算法流程如图所示:
隐变量ZZ为每次实验中选择A或B的概率,则第一个实验选择A的概率为
P(z1=A|y1,θ(0))=P(z1=A|y1,θ(0))P(z1=A|y1,θ(0))+P(z1=B|y1,θ(0))=0.65∗0.450.65∗0.45+0.510=0.45P(z1=A|y1,θ(0))=P(z1=A|y1,θ(0))P(z1=A|y1,θ(0))+P(z1=B|y1,θ(0))=0.65∗0.450.65∗0.45+0.510=0.45
按照上面的计算方法可依次求出隐变量ZZ,然后计算极大化的θ(i)θ(i)。经过10次迭代,最终收敛。
4. 参考资料
[1] 李航,《统计学习方法》.
[2] Chuong B Do & Serafim Batzoglou, What is the expectation maximization algorithm?
[3] Pieter Abbeel, Maximum Likelihood (ML), Expectation Maximization (EM) .
[4] Rudan Chen, 【机器学习算法系列之一】EM算法实例分析 .
⑦ 程序员必须掌握的核心算法
程序员掌握核心算法,还不收录
1、十大排序算法
(1)简单排序:插入排序、选择排序、冒泡排序(必学)。
(2)分治排序:快速排序、归并排序(必学,快速排序还要关注中轴的选取方式)。
(3)分配排序:桶排序、基数排序。
(4)树状排序:堆排序(必学)。
(5)其他:计数排序(必学)、希尔排序。
对干十大算法的学习,假如你不大懂的话,那么推荐你去看书,因为看了书,你可能不仅仅知道这个算法怎么写,还能知道他是怎么来的。推荐书籍是《算法第四版》,这本书讲的很详细,而且配了很多图演示,还是挺好懂的。
2、搜索与回溯算法
(1)贪心算法(必学);
(2)启发式搜索算法:A*寻路算法(了解);
(3)地图着冲猜烂色算法、N 皇后问题、最优加工顺序;
(4)旅行商问题。
这方便的只是都是一些算法相关的,像贪心算法的思想兆纳,就必须学的了。建议通过刷题来学习,leetcode 直接专题刷。
3、动态规划
(1)树形DP:01背包问题;
(2)线性DP:最长公共子序列、最长公共子串;
(3)区间DP:矩阵最大值(和以及积);
(4)数位DP:数字游戏;
(5)状态压缩DP:旅行商。
这里建议先了解动态规划是什么,之后 leetcode专题刷,反正就一般上面这几种题型。
4、字符匹配算法
(1)正则表达式;
(2)模式匹配:KMP、Boyer-Moore。
5、流相关算法
(1)最大流:最短增广路、Dinic 算法。
(2)最大流最小割:最大收益问题、方格取数问题。
(3)最小费用最大流:最小散漏费用路、消遣。
⑧ 五大基本算法——分支限界法
与回溯法一样,分支限界法也是在问题的解空间树上搜索问题的解的一种算法。
两者很类似,很容易混淆,但有如下显着的区别可区分两者:
1、求解目标不同
回溯法的求解目标一般是找出解空间树中满足条件的 所有解 。
分支限界法则是尽快找出满足约束条件的 一个解 ,或是在满足约束条件的解中找出在某种意义下的 最优解 。
2、搜索方式不同
回溯法——> 深度优先 遍历结点搜索解空间树。
分支限界法——> 广度优先或最小耗费优先 搜索解空间树。
3、存储空间不同
分支限界法由于加入了 活结点表 ,所以存储空间比回溯法大得多。因此当内存容量有限时,回溯法的成功率要大一些。
4、扩展结点的方式不同
分支限界法中,每个活结点只有一次机会变成扩展结点,一旦成为扩展结点便一次性生成其所有子结点。
区别小结:回溯法空间效率更高,分支限界法由于只需要求到一个解,所以往往更“快”。
就拿0/1背包问题做例子,回溯法求解0/1背包问题实际上是盲目地搜索解空间树,回溯法只会不断地往下走,虽然通过剪枝函数能减少一定的计算,但是当经过一个结点时,并不知晓其子结点会是怎样的情况,从而盲目继续搜索。而分支限界法则不一样,在经过某一结点时,会根据限界条件判断其结点之下的情况是否能够导出最优解,如若不能,直接不走这条路。这样虽然在空间上不占优势,但是搜索并不盲目,速度上快了很多。
1、定义解空间(对解编码)
2、确定解空间树结构(得解空间树)
3、按BFS广度优先方式搜索解空间树:
(1):每个活结点只有一次机会变成扩展结点。
(2):由扩展结点生成一步可达的新结点。
(3):在新结点中删除不可能导出最优解的结点(限界策略,利用限界函数)。
(4):将剩余新结点加入到活结点表中。
(5):在活结点表中再取每个结点(按顺序)进行扩展(分支策略)。
(6):直到活结点表为空。
注:活结点表通常采用堆结构,当求解极大值问题时用大顶堆,极小值问题时用小顶堆。
1、约束函数:问题定义时需给出的约束条件,如0/1背包问题不能超过其容量。
2、目标函数:是问题要求解的目标函数,分支限界法中需给出一个关于该函数的上下界,方便之后剪枝。
3、限界函数:用于记录当前结点之下可得的最优值,若超出上下界,则可放弃该结点;还用于活结点表中结点排序,限界函数值最优的在第一位,优先扩展遍历。
1、队列式分支限界法:在活结点表中,按照FIFO先进先出原则选取下一个结点做扩展结点。
2、优先队列式分支限界法:活结点表中的每个结点对应了一个耗费或收益(其实就是如果扩展该结点,会带来多大的效益),以此决定结点的优先级。
0/1背包问题、单源最短路径问题、最优装载问题。
⑨ 分治、贪心五大算法
1、分治
分治(即分而治喊孙之),把一个复杂的问题分成多郑激链个相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
适用场景:二分搜索、归并排序、快速排序、大整数乘法、第K小元素、最近点对、快速傅里叶变换等。
2、动态规划
动态规划法也是把问题一层一层地分解为规模逐渐减小的同类型的子问题。动态规划通常用来求最优化问题。此类问题可以有很多可行解,我们求出的是一个最优解,可能存在多个最优解。(最优子结构、公共子问题)
与分治法的区别是:分治的子问题是相互独立的,动态规划最好解决有公共子问题的,子问题相关性很大。
使用场景:矩阵连乘、钢条切割、最长公共子序列、最优二叉搜索树、流水作业调度、0/1背包问题等。
维特比算法是动态规划在HMM中的应用,维特比算法用于解决HMM的预测或者叫解码问题。
viterbi有最优解是因为HMM每一步是条件独立的!既然后面的概率和前面的没关系,那前面选最大的概率就行了。
而beam search时后面的概率依赖于前面所有的词,相当于n-gram是满的,viterbi的n-gram是2
背包问题:
https://blog.csdn.net/wind__chaser/article/details/89457771
https://blog.csdn.net/qq_38410730/article/details/81667885
3、贪心
通过局部最优选择达铅吵到全局最优选择。贪心算法不一定总产生最优解,贪心算法是否产生优化解,需严格证明贪心算法产生最优解的条件:(最优子结构、贪心选择性)
贪心选择性:当一个问题的全局最优解可以通过局部最优解得到,称这个问题具有贪心选择性。
适用场景:活动选择问题、哈夫曼编码问题、最小生成树问题、单源最短路径问题等。
贪心算法:softmax之后取最大概率。与之对应的是,Beam Search算法
http://www.360doc.com/content/18/0618/09/17563728_763230413.shtml
https://blog.csdn.net/qq_16234613/article/details/83012046
https://www.hu.com/question/54356960
分治和动态规划的区别:
动态规划也是一种分治思想(比如其状态转移方程就是一种分治),但与分治算法不同的是,分治算法是把原问题分解为若干个子问题,
自顶向下求解子问题,合并子问题的解,从而得到原问题的解。动态规划也是把原始问题分解为若干个子问题,然后自底向上,
先求解最小的子问题,把结果存在表格中,在求解大的子问题时,直接从表格中查询小的子问题的解,避免重复计算,从而提高算法效率。
动态规划和分治法有些相像,都是把一个问题分成了很多子问题来求解,但是不同的是动态规划会记忆之前解决的子问题的结果,
避免了重复计算。判断一个问题是否能用动态规划求解,要看它是否能划分成合适的子问题,然后写出递推关系式。
动态规划得到的解一定是最优解。
⑩ 算法有五个方面的重要特征,包括输入,确定性,输出,能行性还有
算法有五个方面的重要特征包括有穷性、确切性、输入项、输出项、可行性。
1、有穷性(Finiteness)
算法的有穷性是指算法必须能在执行有限个步骤之后终止;
2、确切性(Definiteness)
算法的每一步骤必须有确切的定义;
3、输入项(Input)
一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
4、输出项(Output)
一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
5、可行性(Effectiveness)
算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成(也称之为有效性)。
(10)5大算法扩展阅读
1、迪杰斯特拉算法(又译戴克斯特拉算法)
这种图搜索算法具有多种应用方式,能够将需要解决的问题建模为图,并在其中找到两个节点间的最短路径。
2、RSA 算法
该算法由 RSA 公司的创始人们开发而成,使得密码学成果得以供世界上的每个人随意使用,甚至最终塑造了当今密码学技术的实现方式。
3、安全哈希算法
这实际上并不是真正的算法,而是由 NIST(美国国家标准技术研究所)所开发的一系列加密散列函数。然而,该算法家族对于世界秩序的维持起到了至关重要的作用。
4、比例微积分算法
该算法旨在利用控制回路反馈机制以最大程度控制期望输出信号与实际输出信号间的误差。其适用于一切存在信号处理需求的场景,包括以自动化方式通过电子技术控制的机械、液压或者热力系统。
5、数据压缩算法
很难确定哪种压缩算法的重要性最高,因为根据实际应用需求,大家使用的算法可能包括 zip、mp3 乃至 JPEG 以及 MPEG-2 等等。