几种常用的算法简介

如题所述

第1个回答  2012-10-15
1、穷举法穷举法是最基本的算法设计策略,其思想是列举出问题所有的可能解,逐一进行判别,找出满足条件的解。
穷举法的运用关键在于解决两个问题:
在运用穷举法时,容易出现的问题是可能解过多,导致算法效率很低,这就需要对列举可能解的方法进行优化。
以题1041--纯素数问题为例,从1000到9999都可以看作是可能解,可以通过对所有这些可能解逐一进行判别,找出其中的纯素数,但只要稍作分析,就会发现其实可以大幅度地降低可能解的范围。根据题意易知,个位只可能是3、5、7,再根据题意可知,可以在3、5、7的基础上,先找出所有的二位纯素数,再在二位纯素数基础上找出三位纯素数,最后在三位纯素数的基础上找出所有的四位纯素数。
2、分治法分治法也是应用非常广泛的一种算法设计策略,其思想是将问题分解为若干子问题,从而可以递归地求解各子问题,再综合出问题的解。
分治法的运用关键在于解决三个问题:
我们熟知的如汉诺塔问题、折半查找算法、快速排序算法等都是分治法运用的典型案例。
以题1045--Square Coins为例,先对题意进行分析,可设一个函数f(m, n)等于用面值不超过n2的货币构成总值为m的方案数,则容易推导出:
f(m, n) = f(m-0*n*n, n-1)+f(m-1*n*n, n-1)+f(m-2*n*n, n-1)+...+f(m-k*n*n, n-1)
这里的k是币值为n2的货币最多可以用多少枚,即k=m/(n*n)。
也很容易分析出,f(m, 1) = f(1, n) = 1
对于这样的题目,一旦分析出了递推公式,程序就非常好写了。所以在动手开始写程序之前,分析工作做得越彻底,逻辑描述越准确、简洁,写起程序来就会越容易。
3、动态规划法
动态规划法多用来计算最优问题,动态规划法与分治法的基本思想是一致的,但处理的手法不同。动态规划法在运用时,要先对问题的分治规律进行分析,找出终结子问题,以及子问题向父问题归纳的规则,而算法则直接从终结子问题开始求解,逐层向上归纳,直到归纳出原问题的解。
动态规划法多用于在分治过程中,子问题可能重复出现的情况,在这种情况下,如果按照常规的分治法,自上向下分治求解,则重复出现的子问题就会被重复地求解,从而增大了冗余计算量,降低了求解效率。而采用动态规划法,自底向上求解,每个子问题只计算一次,就可以避免这种重复的求解了。
动态规划法还有另外一种实现形式,即备忘录法。备忘录的基本思想是设立一个称为备忘录的容器,记录已经求得解的子问题及其解。仍然采用与分治法相同的自上向下分治求解的策略,只是对每一个分解出的子问题,先在备忘录中查找该子问题,如果备忘录中已经存在该子问题,则不须再求解,可以从备忘录中直接得到解,否则,对子问题递归求解,且每求得一个子问题的解,都将子问题及解存入备忘录中。
例如,在题1045--Square Coins中,可以采用分治法求解,也可以采用动态规划法求解,即从f(m, 1)和f(1, n)出发,逐层向上计算,直到求得f(m, n)。
在竞赛中,动态规划和备忘录的思想还可以有另一种用法。有些题目中的可能问题数是有限的,而在一次运行中可能需要计算多个测试用例,可以采用备忘录的方法,预先将所有的问题的解记录下来,然后输入一个测试用例,就查备忘录,直接找到答案输出。这在各问题之间存在父子关系的情况下,会更有效。例如,在题1045--Square Coins中,题目中已经指出了最大的目标币值不超过300,也就是说问题数只有300个,而且各问题的计算中存在重叠的子问题,可以采用动态规划法,将所有问题的解先全部计算出来,再依次输入测试用例数据,并直接输出答案。
4、回溯法回溯法是基于问题状态树搜索的求解法,其可适用范围很广。从某种角度上说,可以把回溯法看作是优化了的穷举法。回溯法的基本思想是逐步构造问题的可能解,一边构造,一边用约束条件进行判别,一旦发现已经不可能构造出满足条件的解了,则退回上一步构造过程,重新进行构造。这个退回的过程,就称之为回溯。
回溯法在运用时,要解决的关键问题在于:
回溯法的经典案例也很多,例如全排列问题、N后问题等。
5、贪心法贪心法也是求解最优问题的常用算法策略,利用贪心法策略所设计的算法,通常效率较高,算法简单。贪心法的基本思想是对问题做出目前看来最好的选择,即贪心选择,并使问题转化为规模更小的子问题。如此迭代,直到子问题可以直接求解。
基于贪心法的经典算法例如:哈夫曼算法、最小生成树算法、最短路径算法等。

五种常用算法
五种常用算法主要有以下几种:1.回归算法。回归算法是试图采用对误差的衡量来探索变量之间的关系的一类算法,是统计机器学习的利器。2.基于实例的算法。基于实例的算法常常用来对决策问题建立模型,这样的模型常常先选取一批样本数据,然后根据某些近似性把新数据与样本数据进行比较。用户通过这种方式来寻找最佳...

人工智能的十大算法是什么?
1、朴素贝叶斯算法(Naive Bayes):是一种基于贝叶斯定理的分类算法,常用于文本分类、垃圾邮件过滤等领域。2、K近邻算法(K-Nearest Neighbor,KNN):是一种基于相似度的分类算法,常用于图像识别、推荐系统等领域。3、决策树算法(Decision Tree):是一种基于树形结构的分类算法,常用于数据挖掘、金融...

机器学习中常用的算法有哪些
1.决策树决策树算法基于一系列规则,用于预测给定数据集属于哪个类别。这些规则“分支”出一棵树,每个分支就是一条决策路径,树的“叶子”是预测结果。2.线性回归线性回归算法的目标是找到一条直线来拟合给定数据集。直线的斜率和截距可以预测因变量的值。该算法是最简单和最常用的机器学习算法之一。3....

几种常用的算法简介
1、穷举法穷举法是最基本的算法设计策略,其思想是列举出问题所有的可能解,逐一进行判别,找出满足条件的解。穷举法的运用关键在于解决两个问题:在运用穷举法时,容易出现的问题是可能解过多,导致算法效率很低,这就需要对列举可能解的方法进行优化。以题1041--纯素数问题为例,从1000到9999都可以看作是...

轻松理解20种最常用的AI算法
5) 随机森林:预测事物的模型,通过查看不同场景学习,根据知识猜测。6) 梯度提升算法:将多个弱模型结合成强模型的技术,较弱模型使用梯度下降算法,最终模型是加权组合。7) 神经网络:对数据中复杂模式进行建模的机器学习算法,由大量互相连接的处理节点组成。8) 主成分分析:查找数据模式的技术,分析...

常用的调度算法有哪些
常用的调度算法有以下几种:1. 先进先出(FIFO)调度算法 FIFO调度算法是一种基本的任务调度算法。它按照任务到达的顺序进行处理,先到达的任务先处理,后到达的任务后处理。这种算法适用于短期任务,对于长期任务可能会有性能问题。因为它不考虑任务的优先级,只是简单地按照顺序执行。2. 短进程优先(SPF...

程序员都应该精通的六种算法,你会了吗?
那么,常用的算法都有哪些呢?一般来讲,在我们日常工作中涉及到的算法,通常分为以下几个类型:分治、贪心、迭代、枚举、回溯、动态规划。下面我们来一一介绍这几种算法。一、分治算法 分治算法,顾名思义,是将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。分...

hash算法有哪些
MD5算法:一种常用的密码散列函数,可将任意长度的信息转化成相对短的固定长度的输出。MD5常用于检验数据完整性,但其存在安全性问题,对于要求更高的安全性环境需谨慎使用。SHA系列算法:这是一种安全的哈希算法系列,较MD5更安全且复杂。SHA系列算法适用于各种密码学应用,如数字签名和验证等场景。SHA系列...

算法的种类有哪些
算法的种类有很多,主要包括以下几种:1. 排序算法 排序算法是计算机科学中最为基础和常用的算法之一。这类算法的主要目的是将一组数据按照特定的顺序进行排列。常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序等。2. 图算法 图算法是用于处理图形数据的算法,主要应用于图论和计算机科学中的相关...

现在密码学采用的算法主要有什么
常用的主要有三种:1.对称密码算法 DES算法——二十世纪七十年代提出,曾经称霸对称加密领域30年 AES算法——二十一世纪初提出用以取代DES算法 IDEA算法——二十世纪九十年代初提出,也是一种流行算法 RC4算法——经典的流密码算法 2.公钥密码算法 D-H算法——用于密钥协商,是第一种使用的公钥算法,基于...

相似回答
大家正在搜