① 对于同一个问题,为什么用粒子群算法和遗传算法得出的结果不一样这是什么原因了
正常的,说明其中某个算法还需要改进,得到的解不够理想,而另一种算法得到的是近似最优解。
② 一个问题的解决往往可以有多种不同的算法
头文件mainwindow.h(文中的粗体为需要添加的内容):
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QAbstractButton>
#include <QPushButton>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
private:
QPushButton *Clear;
private slots:
void on_buttonBox_clicked(QAbstractButton *button);
};
#endif // MAINWINDOW_H
③ 问题 : 结合不同算法技术解决某个实际问题的一个实例。 (就是一个问题中同时要用到多个算法技术,举
在3D图形运算里 需要计算平移 角度 映射 等等一系列坐标相关运算
这里就要用到矩阵 欧拉角 四元数来进行操作了 因为矩阵不能做插值运算 而四元数可以有很好的插值效果 四元数不好理解不便于输入 当然矩阵也是 矩阵需要输入9个值(3X3矩阵) 而欧拉角 只需要3个值 不过欧拉角在计算旋转时会有万向锁问题 所以需要用矩阵或四元数来计算。
④ 计算机同一个问题只能用一个算法对吗
不是。
每个问题都有多个算法。只是算法是泛意的,并不是一定是计算机上可以运行的。如果可以在计算机上运行的,都是可以用数学建模的,那么数学模型出来了,算法也就有了。算法有了,具体用什么语言就看楼主自己了,可以写成标准C,也可以用C++实现,也可以用JAVA实现,比如说排序,任何一种计算机语言都能实现。
⑤ 同一个问题算法不同,结果必不同
一个算法最多可以包含三种逻辑结构的任意组合,故A不正确;
同一问题的算法不同,结果必然相同,故B不对;
算法既能用图形方式来表示,也能用自然语言来表示,故C不正确;
一个算法可以含有上述三种逻辑结构的任意组合,故D正确.
故选D.
⑥ 对于同一个问题可采用不同的算法去解决,但不同的算法通常具有相同的效率这句话错在哪 急!
不同的算法不会有相同的效率。
就比如11x12=132
第一种算法,两边一拉中间相加。像左1 右2 中间1+2=3
再举个例子11x55 605
第二种算法,归整零相加。像10x12+12
⑦ 几种常用的算法简介
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、贪心法贪心法也是求解最优问题的常用算法策略,利用贪心法策略所设计的算法,通常效率较高,算法简单。贪心法的基本思想是对问题做出目前看来最好的选择,即贪心选择,并使问题转化为规模更小的子问题。如此迭代,直到子问题可以直接求解。
基于贪心法的经典算法例如:哈夫曼算法、最小生成树算法、最短路径算法等。
⑧ 采用准确优化技术和启发式优化技术解决一个问题会存在什么不同
采用准确优化技术和启发式优化技术解决一个问题会存在的不同之处:
①确定性算法和随机性算法是目前求解优化问题的方法。随机性算法一般是对社会行为和自然现象的模拟,具有对优化函数的解析性质要求低的特点,甚至对无显示解析表达式的问题也可以求解,能较好解决优化中的噪声、不可微、高维等问题。
②启发式算法作为随机性算法的一种,其良好的应用更加快了人们对各种优化方法的探索脚步。 近些年来不断有学者将分形应用于优化中来,试图运用分形思想来处理复杂的优化问题。
③其中,分形算法通过对可行域的分形分割来寻优,是一种新颖的确定性算法,但其局限性较大,只适用于低维简单的问题,对于当今社会中高维复杂问题则几乎无能为力,也使得该算法的影响力微乎其微。
④启发式技术是基于特征值扫描技术上的升级,与传统反病毒特征值扫描技术相比,优点在于对未知病毒的防御.是特征值识别技术质的飞跃。
(8)求解同一个问题所采用的不同算法扩展阅读
启发式:简化虚拟机和简化行为判断引擎的结合 Heuristic(启发式技术=启发式扫描+启发式监控) 重点在于特征值识别技术上的更新、解决单一特征码比对的缺陷.目的不在于检测所有的未知病毒,只是对特征值扫描技术的补充.主要针对:木马、间谍、后门、下载者、已知病毒(PE病毒)的变种。
一、启发式发展方向
现代启发式算法的研究,在理论方面还处于不断发展中,新思想和新方法仍不断出现。分析目前的现状和发展方向,其发展方向有如下几个方面:
①整理归纳分散的研究成果,建立统一的算法体系结构。
②在现有的数学方法(模式定理、编码策略、马尔可夫链理论、维数分析理论、复制遗传算法理论、二次动力系统理论、傅立叶分析理论、分离函数理论、Walsh函数分析理论)的基础上寻求新的数学工具。
③开发新的混合式算法及开展现有算法改进方面的研究。
④研究高效并行或分布式优化算法。
二、启发式算法算法机制特点
现代启发式算法在优化机制方面存在一定的差异,但在优化流程上却具有较大的相似性,均是一种“邻域搜索”结构。算法都是从一个(一组)初始解出发,在算法的关键参数的控制下通过邻域函数产生若干邻域解,按准则(确定性、概率性或混沌方式)更新当前状态,而后按关键参数修改准则调整关键参数,一直优化到最优结果。
⑨ 一个问题的解决往往可以有多种不同的算法
这个是肯定的,条条大路通罗马,一个问题肯定有多个不同的解决方法,算法也是一样。只不过分为合适的和不合适的。
⑩ 设求解同一问题有四种算法,这四种算法各自的时间复杂度分别为O(n^2), O(nlogn), O(2^n),O(n),
常用的时间复杂度所耗费的时间从小到大依次是:
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2^n)<O(n! )<O(n^n)