分析算法(精选12篇)
分析算法 篇1
1 引言
20世纪以来, 随着科技的不断进步, 传统的手工劳动已不能适应社会的快速发展, 机器时代顺应而生。为更好地将机器劳作代替手工劳动, 且高效率完成工作任务, 各种控制机器的智能算法随之产生。本文按照3种智能算法——蚁群算法、模拟退火算法、遗传算法的时代产生顺序, 依次介绍3种算法的由来及其应用领域, 并将3种算法在求解方面和收敛速度方面进行了分析比较。
模拟退火是1953年Metropolis等人根据物理中固体加温、等温、冷却过程提出的, 该过程与实际生活中的一些组合优化问题具有通融性, 目前已在工程中得到广泛应用。遗传算法是1975年J.Holland教授依据达尔文的“适者生存, 优胜劣汰”的自然进化机制首先提出的。该算法在求解过程中, 能够自动适应和控制搜索方向, 在机器学习、信号处理、自适应控制等领域得到较好应用。蚁群算法是1991年Dorigo等人提出的一种新型智能算法, 该算法思想源于自然界中蚂蚁觅食行为, 蚂蚁在觅食过程中会寻找最短路径, 故蚁群算法最早应用于解决TSP问题, 初见成效后, 陆续应用到静态、动态组合优化问题中。3种算法在智能计算中都发挥着重要作用。
2算法实现
本节以传统TSP问题为研究对象, 分别介绍3种算法——蚁群算法、模拟退火算法、遗传算法在解决TSP问题时的算法实现流程。
2.1蚁群算法实现流程
本节给出使用蚁群算法解决TSP问题的流程图, 如图1所示。
2.2 模拟退火算法实现过程
本节利用伪程序阐述使用模拟退火算法求解TSP问题, 过程如图2所示。
上述过程中, T是初始温度, S是初始值, S’是当前回路产生的新回路, f (S) 是路径总长度。
2.3 遗传算法实现过程
遗传算法解决TSP问题的实现过程如下所示。
步骤一:种群初始化。在众多染色体编码方法中选择实数编码解决TSP问题。初始化种群数量、染色体基因个数、交叉概率、变异概率、迭代次数等。
步骤二:写出适应度函数。对于TSP问题, 觉得算法好坏的指标是总距离。根据染色体可计算出总距离, 距离越短, 适应度函数越好。
步骤三:选择算子。程序采用轮盘赌策略, “优胜劣汰”的思想, 并且在每代中保存适应度最好的个体。
步骤四:交叉算子。采用单个染色体指定位置交叉的思想, 防止程序过早陷入局部收敛。
步骤五:变异算子。根据变异概率, 随机选择变异个体, 随机选取染色体中的基因进行交换实现变异过程。
3 三种算法的比较
本节验证蚁群算法在求解质量和收敛速度方面的优劣, 待比较算法为模拟退火算法和遗传算法。实验过程分为两组:第一组比较三种算法在所得解质量方面的优劣, 第二组比较三种算法在收敛速度上的快慢。
3.1 求解质量对比
求解质量对比可描述为在相同条件下, 即随机生成5组数据, 每组数据包含50个不同城市, 组成五个完整的TSP问题, 得到蚁群算法与模拟退火、遗传算法所得解质量的优劣。在随机产生的问题上的运行结果如表1所示。
从表1可以看出, 蚁群算法求解的质量最高, 其他两种算法——模拟退火、遗传算法求解质量不及蚁群算法。
3.2 收敛速度对比
收敛速度可以作为评判算法性能优劣的一个重要指标。本节对蚁群、模拟退火、遗传算法在收敛速度方面进行比较。实验过程包含三个城市数量在50到100之间的几何问题, 三种算法在几何问题上的仿真结果如表2所示。
从表2可以看出, 随着城市数量的增加, 3种算法收敛到最优解的迭代次数差距也随之增大。当城市数量为50时, 蚁群系统在第2412代收敛到最优解, 而模拟退火算法在68512代收敛到最优解, 与蚁群算法收敛速度相差一个数量级, 遗传算法介于蚁群系统和模拟退火算法之间, 在第25000代收敛到最优解。以上结果表明:蚁群算法的收敛速度最快。
4 结语
蚁群算法与模拟退火、遗传算法在细节上具有差异, 如蚁群算法适用于小规模智能计算、遗传算法可能陷入局部最优解等, 但3种算法都具有较强的鲁棒性, 算法间可以相互融合, 也可与其他启发式算法融合, 改善算法的性能。
参考文献
[1]程飞.改进蚁群算法及其应用研究[D].江西:江西理工大学, 2013.
[2]何小锋, 马良.带时间窗车辆路径问题的量子蚁群算法[J].系统工程理论与实践, 2013, 33 (5) :1255-1261.
[3]王占峰.求解车辆路径问题的改进蚁群算法[J].华侨大学学报:自然科学版.2013, 34 (1) :36-39.
分析算法 篇2
字典II 算法分析
。写此文,只是看看它的注册方式而已。
字典II是一个共享软件,如果您需要使用它的全部功能,测需要进行注册。这种注册是免费的。您只要发一封标题为“注册”的电子邮件到作者信箱中即可收到以同样方式发回的注册码。为了给作者少添点麻烦,还是自己解决吧。
作用:生成字典档文件。
1、输入用户名和注册码后,启动TRW,设中断BPX HMEMCPY 再回到程序中,按确定,拦截成功。
2、按F10直到第二次回到程序中是慢走。看到如下程序。
0167:00401BC6 CALL 0046
0167:00401BCB MOV EAX[EBP+78]
0167:00401BCE LEA ESI[EBP+5C]
0167:00401BD1 PUSH EBX
0167:00401BD2 PUSH BYTE -01
0167:00401BD4 PUSH DWORD B1
0167:00401BD9 PUSH EAX
0167:00401BDA CALL EDI
0167:00401BDC MOV ECX[ESI+1C]
0167:00401BDF PUSH EBX
0167:00401BE0 PUSH EBX
0167:00401BE1 PUSH DWORD B7
0167:00401BE6 PUSH ECX
0167:00401BE7 CALL EDI
0167:00401BE9 LEA EDX[ESP+84]
0167:00401BF0 PUSH BYTE +64
0167:00401BF2 PUSH EDX
0167:00401BF3 MOV ECXESI
0167:00401BF5 CALL 00420016
0167:00401BFA LEA EDI[ESP+20]
0167:00401BFE OR ECXBYTE -01
0167:00401C01 XOR EAXEAX
0167:00401C03 REPNE SCASB
0167:00401C05 NOT ECX
0167:00401C07 DEC ECX
0167:00401C08 JZ NEAR 00401E24
0167:00401C0E LEA EDI[ESP+84]
0167:00401C15 OR ECXBYTE -01
0167:00401C18 REPNE SCASB
0167:00401C1A NOT ECX
0167:00401C1C DEC ECX
0167:00401C1D JZ NEAR 00401E24
0167:00401C23 LEA EDI[ESP+20]
0167:00401C27 OR ECXBYTE -01
0167:00401C2A XOR ESIESI
0167:00401C2C REPNE SCASB
0167:00401C2E NOT ECX
0167:00401C30 DEC ECX
0167:00401C31 JZ 00401CAC
上面的代码是什么意思,你自己看吧。重点是下文。
0167:00401C33 MOVSX EDIBYTE [ESP+ESI+20]取用户名中的一个字节,
0167:00401C38 MOV EAXEDI做为被除数
0167:00401C3A MOV ECX0A除数
0167:00401C3F CDQ
0167:00401C40 IDIV ECX
0167:00401C42 MOV ECXEDX余数传给ECX。
0167:00401C44 AND EDX80000001进行与运算,
0167:00401C4A JNS 00401C51不为负就跳。
0167:00401C4C DEC EDX
0167:00401C4D OR EDXBYTE -02
0167:00401C50 INC EDX
0167:00401C51 JNZ 00401C69不为零就跳
0167:00401C53 MOV EAXEDI否则重新赋值再次进行计算。
0167:00401C55 MOV ECX1A此次除数被换成1A,
0167:00401C5A CDQ
0167:00401C5B IDIV ECX
0167:00401C5D ADD DL41余数与DL相加得出注册码
0167:00401C60 MOV [ESP+ESI+0148]DL把注册码存入[ESP+ESI+0148]中。
0167:00401C67 JMP SHORT 00401C97
0167:00401C69 MOV EAXECX把余数传给EAX
0167:00401C6B MOV EBX03
0167:00401C70 CDQ
0167:00401C71 IDIV EBX
0167:00401C73 TEST EDXEDX
0167:00401C75 JNZ 00401C8D不为零就跳,用上面的结果ECX+31得出注册码。
0167:00401C77 MOV EAXEDI如果为零重新赋值计算。
0167:00401C79 MOV ECX1A除数
0167:00401C7E CDQ
0167:00401C7F IDIV ECX
0167:00401C81 ADD DL61 余数DL与61相加得出注册码
0167:00401C84 MOV [ESP+ESI+0148]DL
0167:00401C8B JMP SHORT 00401C97
0167:00401C8D ADD CL31得出注册码
0167:00401C90 MOV [ESP+ESI+0148]CL
0167:00401C97 LEA EDI[ESP+20]你所输入的用户名串地址。
0167:00401C9B OR ECXBYTE -01
0167:00401C9E XOR EAXEAX
0167:00401CA0 INC ESI
0167:00401CA1 REPNE SCASB
0167:00401CA3 NOT ECX
0167:00401CA5 DEC ECX
0167:00401CA6 CMP ESIECX ESI是循环的次数。 ECX是用户名的总的位数,
0167:00401CA8 JC 00401C33有进位(也就是没有循环完毕)就跳进行下一轮计算。
0167:00401CAA XOR EBXEBX
0167:00401CAC PUSH EBP
0167:00401CAD LEA ECX[ESP+EC]
0167:00401CB4 MOV [ESP+ESI+014C]BL
0167:00401CBB CALL 00401EB0
0167:00401CC0 MOV [ESP+01B4]EBX
0167:00401CC7 LEA ESI[ESP+84]假码。
0167:00401CCE LEA EAX[ESP+0148]真码
至此就可以结束了,下文是进行比较。
0167:00401CD5 MOV DL[EAX]
0167:00401CD7 MOV CLDL
0167:00401CD9 CMP DL[ESI]
0167:00401CDB JNZ 00401CF9
0167:00401CDD CMP CLBL
0167:00401CDF JZ 00401CF5
0167:00401CE1 MOV DL[EAX+01]
0167:00401CE4 MOV CLDL
0167:00401CE6 CMP DL[ESI+01]
0167:00401CE9 JNZ 00401CF9
0167:00401CEB ADD EAXBYTE +02
0167:00401CEE ADD ESIBYTE +02
0167:00401CF1 CMP CLBL
0167:00401CF3 JNZ 00401CD5
0167:00401CF5 XOR EAXEAX
0167:00401CF7 JMP SHORT 00401CFE
0167:00401CF9 SBB EAXEAX
0167:00401CFB SBB EAXBYTE -01
总结:用户名有几位,注册码就有几位。举例。
用户名:abcde
密码:8UvW2
图像增强基本算法的分析 篇3
【关键词】图像;图像增强;算法お
The Analysis of The Basic Algorithm to The Image Enhancement
Chang Da—jun
(Changchun Architecture & Civil Engineering CollegeChangchunJilin130607)
【Abstract】Techniques of image enhancement aim at improving the interpretability or perception of information in images for human viewers,eliminating or attenuating unneeded information. This paper is developed according to the algorithm of image enhancement, and systematically investigated and compared. The advantage and defect of the above—mentioned algorithms as well as the suitable application of them.
【Key words】Image;Image Enhancement;Arithmeticお
1. 图像增强意义
图像增强是数字图像处理过程中的重要研究技术。但条件影响致使获得图像效果不佳,这就要使用图像增强技术来改善视觉效果,如突出特点、提取特征参数等,都有利于对目标的识别、跟踪等。因此,在各个领域中都有应用。
2. 图像增强基本方法
2.1空域邻域基本理论。
空域滤波是基于模板卷积,对图像中任意点的像素点(x,y)进行m×n掩模处理得到的响应,其公式如下所示:
R=W1Z1+ W2Z2+ …+W﹎n猌﹎n=∑mn i=1 W璱Z璱(1)
W为掩模系数,z为对应像素灰度值, mn为包含像素点总数。主要步骤为:ィ1)模板在图像中移动,并将模板中心与某个像素位置重合。ィ2)读取模板下各对应像素的灰度值,并与模板系数相乘,所得乘积累加。ィ3)将和赋值给模板中对应位置的像素。常用技术:邻域平均法、中值滤波法等。
图1均值滤波
2.2频域图像增强方法的基本理论。
频域增强是利用图像变换技术将原图像空间中的图像以某种形式转换到其它空间中,然后利用该空间特有性质进行图像处理,最后再转换回原图像空间中,致使获得处理后的图像。主要步骤是:ィ1)选择变换技术,将原图像变换到频域空间。ィ2)在频域空间中,依据处理目的设计转移函数同时进行处理。
(3)将所得结果用反变换得到增强后图像。频域图像增强技术:低通滤波、高通滤波、带通带阻滤波。
3. 实验分析
3.1空域邻域实验分析。
3.1.1邻域平均法。
以图像自带的eight.tif为例,对其人为地添加少量椒盐噪声,然后利用不同大小模板的均值滤波对其进行去噪处理。结果如图1所示:
从图1中可以看出,均值滤波去噪时,模板大小的选取至关重要,一般来说,模板越大,去噪能力越强,但同时也会是图像变得模糊。就像图1所示一样,选用3×3模板时,噪声虽然被减弱,但是仍能清晰得看见噪声的痕迹,选用5×5模板时,噪声被进一步减弱,但是图像变得比使用3×3模板时更模糊,而选用7×7模板时,噪声基本消失不见,但是图像也有些模糊不清了。
图2中值滤波
3.1.2中值滤波法。
如果既要消除噪声又要保持图像的细节,可以使用中值滤波器。原因是由于中值滤波不是简单地取平均值,因此所产生的模糊比较少。结果如图2所示:
从图2中可以看出,尽管这里人为添加的噪声较多,但中值滤波仍然较好地滤去了椒盐噪声,且克服了均值滤波所带来的图像模糊现象。同时,也可以看到,去噪后的图像边缘保留了个别的噪声点,这是因为图像的分辨率不是3×3的整数倍,其右侧补0,而这些噪声点的灰度值位于中值排序的中间。
图3椒盐噪声的巴特沃斯地通过滤波
图4椒盐噪声的指数低通滤波图像
3.2频域图像实验分析。
3.2.1巴特沃斯低通滤波器。
对人为添加了少量噪声的图像pout.tif进行巴特沃斯低通滤波。结果如图3所示:
从图3可以看出,处理前的图像对比度虽然较高,但是噪声点太多。经过巴特沃斯低通滤波处理以后,噪声虽然消失,但图像相比处理前更为模糊,且图像中有明显的振铃现象。这是因为噪声点主要存在于高频段,而低通滤波允许处于低频段的像素通过,这就使得处于高频段的噪声点和图像轮廓边缘无法通过,因此图像变得模糊不清。
3.2.2指数低通滤波器。
对人为添加了少量椒盐噪声的图像pout.tif进行指数低通滤波。结果如图4所示:
从图4可以看出,与图3相比,处理后的图像效果并没有明显改善,甚至图像变得更模糊了,造成这种现象的原因与在巴特沃斯低通滤波中产生模糊的原因基本相同,唯一不同的是在处理过程中引用的处理公式不同,也正是因为这一点,与巴特沃斯低通滤波相比,指数低通滤波的振铃现象有所缓解。
4. 结束语
图像增强技术是现今在计算机方面研究的重点内容,通过对有关基本方法的介绍来了解图像技增强术在今后应用的领域。
参考文献
[1]柏春岚.基于空域图像的研究与分析[J].河南城建学院学报,2011年1月,第20卷第1期:57~60.
[2]贾小军.基于MATLAB的图像增强技术研究[J].渭南师范学院学报,2008年3 月,第23卷第2期:68~70.
算法分析与优化 篇4
在进行程序设计时, 同一问题可以用不同的算法解决, 而一个算法的质量优劣将影响到程序运行的效率。在存储空间和程序运行时间要求苛刻的情况下, 就必须对各种算法进行分析, 其目的在于选择合适算法和改进算法。算法分析主要是指分析算法的效率, 它主要包含两方面的内容:算法的运行时间和运行使用空间。我们可以通过对同一问题的不同算法分析来评价这些算法的优劣。
2 算法的运行时间
一个算法执行所耗费的时间, 从理论上是不能算出来的, 必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试, 我们可以通过算法花费的时间与算法中语句的执行次数成正比这种关系来判断不同算法执行所耗费的时间的不同。下面我们通过分析一个具体问题的不同算法来说明各种算法的执行时间效率。
问题描述:求范围[2, n]内的所有素数 (质数) 。
算法一:判断一个整数n是否是素数, 可依次进行n/2, n/3, ..., n/ (n-1) 试除, 如果都没有除尽, 则n是素数, 否则n不是素数。简单说:就是试除到n的前一个数。
算法二:判断一个整数n是否是素数, 可依次进行n/2, n/3, ..., n/ (n/2) 试除, 如果都没有除尽, 则n是素数。否则n不是素数。简单说:就是试除到n的二分之一处。
算法三:判断一个整数n是否是素数, 可依次进行n/2, n/3, ..., n/sqrt (n) 试除, 如果都没有除尽, 则n是素数;否则n不是素数。简单说:就是试除到n的开平方根处。
上述三种算法都涉及到如下双循环语句结构:
其中, “□”处可依次用n-1、n/2、sqrt (n) 分别代替形成前面对应算法。
上述三种算法采用的都是双循环结构, 无论是判断单个数还是判断完所有数, 三种算法的运行次数显然是不同的, 算法一执行次数最多, 算法二位列其次, 算法三执行次数最少。然而, 如果我们逆向思维, 结合第三种算法思想, 以范围内所有整数的可能最简因子作为外循环, 内循环采用排除法, 排除那些因子倍数的非素数, 最后剩下的便是我们所要的范围内的所有素数, 具体算法如图2所示算法四函数模块。
算法四同算法三比较, 算法执行的时间进一步缩短了, 但带来了新的问题:算法在运行过程中增加了内存空间的开销。如何压缩使用内存成为我们接下来需要改进算法的目的所在。
3 算法运行使用空间
针对前面提出的新问题, 我们可以基于如下思想:对于处理一段在连续区间分布的整数, 我们可以利用二进制位和位运算, 通过公式运算将每个整数转换到连续区间分布的某位二进制位上, 从而实现存储空间的压缩使用。如果系统存储一个整数需要2个字节, 则新算法可以实现用1位代替2个字节;如果系统存储一个整数需要4个字节, 则新算法可以实现用1位代替4个字节, 具体算法如图3所示算法五函数模块。
4 结束语
算法设计是软件开发的灵魂, 不同的人可能设计出不同的算法, 每种算法在执行时间和使用空间上可能存在差异。在存储空间和程序运行时间要求苛刻的情况下, 就必须对各种算法进行分析, 以期追求最优的算法。编写好的算法也是一个优秀程序设计人员所追求的目标, 笔者也想借此抛砖引玉, 希望广大程序设计人员设计出最优的算法。
参考文献
[1]严蔚敏.数据结构.北京:清华大学出版社, 2008
[2]黄维通.Visual C++面向对象与可视化程序设计.北京:清华大学出版社, 2001
针对百度算法更新的两点分析 篇5
图一说明:本站近期收录情况
图二说明:网站今日收录情况
据笔者观察,昨天晚上百度算法又更新了,笔者小站今早收录突然增加了200多页,另笔者大喜不已,另外排名也开始提升了一点。当然,说到百度更新,肯定是有人欢喜有人愁的,笔者这次百度更新是喜的,我想肯定还有很多草根站长是愁的。那么我们应该如何面对百度更新给我们草根站长带来我欢喜和忧愁呢?我想不管怎样,我们都应该从容的去面对百度的更新,要一如既往的做好自己的本分工作,这样才是长久之计。下面笔者老生常谈的做下两点分析:
一、文章更新
1.在更新网站文章的时候一定要是原创的文章。大家都知道,自己吃东西的时候,都是喜欢吃新鲜的,特别是蔬菜、水果一类的,因为新鲜的东西有营养,口味好。把蜘蛛比作人的话,蜘蛛也喜欢新鲜的“食物”,这样能给它带更多的“营养”,能让它更strong。这样的话它就经常光临你的“家”,然后打包带走新鲜的食物,慢慢的它会喜欢这里,好处嘛大家都清楚。在原创的时候大家要主要标题、内容等方面要做到独一无二,千万不出现雷同的情况,本来文章是原创,结果让蜘蛛认为是复制或是为原创的那就有点得不偿失了。
2.要坚决抵制从别人网站复制的文章。上面说过蜘蛛喜欢新鲜的“食物”,你却天天给都是别人吃剩下的,它会喜欢吗?即使这样的网站有这不错的收录,但是排名肯定不会很好的!
3.文章的内容要跟网站相挂钩,
在搜索引擎中相关性占据很重要的一个比例。本来应该是一个买衣服的网站,你在更新文章的时候却弄成买车的,两者不相搭边,即使你的网站文章是原创的,百度也不一定给你好的排名,反而会有更严重的后果。切记不要为了所谓的原创而去原创。
4.文章要有可读性和价值。你学的文章内容可读性越好,内容越有价值,就容易被收录。在这方面我们主要是看流行度与时效性,最近流行的“元方,你怎么看?”,“江南style”等,你可以在文章中比较巧妙穿插入这些话语,或者用作标题,像“元方,对于这次百度大k站你怎么看?”等等,带入这些有着热门搜索的词或者有指数上升的词,相信效果应该不错。
二、外链
外链,SEOer都很清楚它的重要性。
1.外链的广泛度。 打个比方吧, 外链就相当于选民投票国家总统一样,网站是竞选人,而外链就是选民,支持者多谁的票数就越多,自然地位就越高,当选的可能性就越大。 其实在搜索引擎中广泛度是外链衡量的标准之一,广泛度在网站排名中起着很重要的意义。在两个情况完全相同的网站里,外链的范围越广越多的排名同时就会更高。同样的逻辑下,网站被链接的次数越多,也能反映这个网站也更受欢迎。
2.外链的质量也有着很重要的比例。如果你选择外链的网站、论坛、博客权重很低,可能即使你网站外链的外链够多,可能也能难达到效果。
小结:
Linux CFS调度算法分析 篇6
关键词:Linux调度O(1)CFS调度器红黑树
1 linux进程调度的概述
所谓进程调度就是指操作系统正确的匹配CPU时间之后来准确的执行等待中的进程。怎样从若干个可运行的进程里面找到其中最优先的进程执行的同时又能保证响应时间短、吞吐量高是进程调度的核心所在。进程调度有何时启动调度器和调度器执行什么调度算法两部分。
进程调度的要求就是吞吐量大、响应时间快、周转时间短以及效率高。由进程的响应时间Linux内核可以把进程分为三类:实时进程、批处理进程和交互进程。根据这三类进程内核又产生了三种不同的调度方法:先进先出策略(SCHED_FIFD)、轮转策略(SCHED_RR)和适合交互分时的程序(SCHED_OTHER)。
2 进程调度算法
①当CPU运行进程时,调度是被禁止的;只有当CPU处于无进程运行时,可以进入调度。
②当准备队列空闲时,执行缺省的idle-task、进程。
③当准备队列非空闲时,执行的进程需要调度器在准备队列中挑选出来。这时,goodness()函数将会从调度器在准备队列中挑选出来的进程中计算其权值,只有权值最大才能有执行的优先级。
④如果经过goodness()函数计算之后每个进程的权值均是0,则说明CPU所提供给实时进程的准备队列中进程的时间片全部用光了,需要进行重置之后返回步骤①,继续执行调度。
⑤当实时进程都执行完成之后,CPU将对普通进程开始支持。当每一个普通进程的权值均是0时,则说明CPU所提供给普通进程的准备队列中进程的时间片全部用光了,需要进行重置之后返回步骤①,继续执行调度。
3 linux从O(1)调度器到CFS调度器
3.1 O(1)调度器
在Linux新版本Linux2.6.22中,其内核采用的是O(1)调度器,其不仅仅能够支持SMP并且可以确保系统的负载和处理器的数目如何变化,其判断相对应的任务所匹配CPU所利用的时间是不变的。
有2种不同的任务是O(1)调度器的分内工作:
①计算动态任务优先级。利用公式dynamicpriority=max(100,min(staticpriority-bonus+5,139))进行计算。
②当拥有最高优先级的进程执行过程中,选择出下一个需要进行执行的进程。CPU利用调度器对所有进程进行了任务排队:expired数组与active数组。其数组中的某一元素寄存着该任务队列某一优先级的指针,如果需要判断下一个执行的进程时,并不需要将所有的队列进行遍历,只需要在active数组排列好的队列中直接选择优先级最高的进程进行执行。上述方法的复杂度是O(1)。
为了让交互式任务的响应速度变得更快,任何一次时钟中断里,处于执行的任务的时间片减一,如果时间片是O的时候,将对其类型进行判断,若是交互式任务,需要将时间片进行重置然后将active数组再次插入其中;若不是交互式任务,需要把active数组转到expired数组中,如此便可以让CPU优先被交互式任务所使用。当然,并不能够将进城长期的放在active数组里面,当CPU被交互式任务占用达到了一定的数值时,将会把任务转到expired数组中去。如果active数组处于空的状态时,则将两个数组进行互换,从而执行下一轮调度。
O(1)调度器的优点已经显而易见了,与此同时其算法也存在一些不可避免的缺陷,如执行导交互式任务的时候反应速度并不理想。多任务队列和动态优先级是O(1)调度器所应用的相对繁琐的方法,这样就迫使了调度器较为繁琐以及对代码维护的时候难度非常之大。此外,在实际使用的时候发现,相对于在类似于服务器等不存在较大的交互性应用需求的时候,在桌面应用这种对交互性要求很高的环境下,O(1)调度器的效果表现非常不理想。基于这种缺点,Ingo Molnar研发了新的完全公平调度器 (Completely Fair Scheduler,CFS),此款调度器与O(1)调度器的框架完全不同,在Linux2.6.23版本中,就将CFS作为默认调度器进行使用。
3.2 CFS 调度器
3.2.1 算法的主要思想
CFS并没有采用以往的将进程进行排列分组以及进行动态的优先级分类,也没有采用睡眠时间的概念,同时也没有将任务分为交互任务和其他,CFS则是引入了一个新的概念——红黑树;所谓红黑树就利用时间来计算一个键值从而来选择下一个执行进程,进而利用全部进程所对CPU所利用的时间状态来调度任务。全部的准备状态中的进程被赋予的键值数值被放在红黑树的叶子节点上,按照键值从小到大一次排列在从左到右。在任何一个调度点上,调度器会从红黑树排列好的进程从左至右的对CPU进行进程的调度,这种执行的复杂度为O(log2N)。
在所有的时钟中断上面,其首要的任务是更新调度信息,其次是对红黑树上的排列好的进程进行进一步的调整。当检测到正在执行的进程并不是最左边的进程时,将对其进行need_resched标记,当执行中断返回的时候就要利用scheduler_tick()来完成对进程的切换,如果没有这个过程,CPU将会被一直占用。
3.2.2 红黑树
CFS依靠进程的虚拟运行时间作为其变量,进而使用红黑树把每一个准备好执行的进程排列成“runqueue”。CFS将之前一直运用的FIFO以及Hash映射形式的线性“qunqueue”彻底移除,每一个runqueue都是利用红黑树来进行组成的。
红黑树的特点也是非常明显的:首先,红黑树上的每一个节点都能够保证一项规律,那就是该节点的左边节点永远小于该几点,相对的右边的节点就大于该节点,这就是之所以红黑树从左至右依次增大的效果;其次,红黑树上分布的所有节点都是均匀的,绝对不会出现不均匀的情况;最后,其操作代价非常低,插入、查找以及删除的代价都是0(logn)。在CFS实际的应用中,表现最为突出的还是第一条特点。
该算法中,每一个节点都作为virtual_runtime键值植入到红黑树里面,当有进程需要进行执行的时候,将键值进行更新之后植入到红黑树,之后从左至右的一次进行执行进程。
当CFS进行调度的过程中,其复杂度是O(logn),可是因为CFS具有实现代价低的特点,实际执行的过程中,反应速度反而快了很多。此外,Linux中的CFS还赋予了很多可操作性的功能,像可以进行灵活配置的调整选项等,这样可以让用户在任何情况之下都能够得到最好的性能体验。
3.2.3 源代码分析
我们参考内核2. 6. 24 源代码中的sched. c 和sched_fair. c来分析:
Scheduler_tick()函数是Sched.c中的一个函数,Scheduler_tick()函数改变当前的时间值与clock 值后CPU会刷新当前的负载情况,最后调用sched_class函数和task_tick( ) 函数。
static void task_tick_fair(struct rq* rq,struct task_struct * curr)
{
struct cfs_rq* cfs_rq;
struct sched_entity* se = &curr - > se;
for_each_sched_entity(se) {
cfs_rq = cfs_rq_of(se);
entity_tick(cfs_rq,se);
}
}
task_tick_fair函数的目的是使待调度任务执行entity_tick()函数:
static void entity_tick( struct cfs_rq * cfs_rq,struct sched _entity *
curr)
用函数dequeue_entity( )与enqueue_entity( )的主要目的是在红黑树里把任务删除在插入到红黑树里用来调整任务在红黑树里的位置。_pick_next_entity()函数是返回到CFS中红黑树的最左边的叶子节点,如果发现这个节点它不是当前的任务,那么就调用_check_preempt_
curr_fair( ) 设置调度标志,当中断返回时就会调用schedule_tick() 进行调度,替换当前任务。
参考文献:
[1]杜慧江.Linux内核2.6.24的CFS调度器分析[J].计算机应用与软件,2010(2).
[2]冯宇.Linux进程调度算法分析[J].计算机与现代化,2009(6).
[3]张永选.Linux 2.6 内核调度机制剖析与改进[J].计算机系统应用,2009(11).
数字图像增强算法分析 篇7
关键词:图像增强,直方图均衡化,MATLAB,对比度增强
1 研究目的和意义
图像增强的目的是改善图像的视觉效果, 针对给定图像的应用场合, 有目的地强调图像的整体或局部特性, 扩大图像中不同物体特征之间的差别, 满足某些特殊分析的需要。其方法是通过一定手段对原图像附加一些信息或变换数据, 有选择地突出图像中感兴趣的特征或者抑制 (掩盖) 图像中某些不需要的特征, 使图像与视觉响应特性相匹配。在图像增强过程中, 不分析图像降质的原因, 处理后的图像不一定逼近原始图像。图像增强技术根据增强处理过程所在的空间不同, 分为基于空域的算法和基于频域的算法两大类。基于空域的算法处理时直接对图像灰度级做运算, 基于频域的算法是在图像的某种变换域内对图像的变换系数值进行某种修正, 是一种间接增强算法[1]。
2 直方图与直方图均衡化
2.1 直方图
1) 直方图又称质量分布图, 是一种几何形图表, 它是根据从生产过程中收集来的质量数据分布情况, 画成以组距为底边、以频数为高度的一系列连接起来的直方型矩形图。
2) 图像的直方图。 以灰度图为例, 假设图中一共只有0、1、2、3、4、5、6、7 8种灰度, 0代表黑色, 7代表白色, 其它数字代表0~7之间不同深浅的灰度, 见图1。
统计的结果如下, 横轴标示灰度级别 (0~7) , 纵轴标示每种灰度的数量, 见图2。
Photoshop (PS) 中的显示, 见图3。
2.2 直方图均衡化
2.2.1 直方图均衡化的定义
直方图均衡化方法把原图像的直方图通过灰度变换函数修正为灰度均匀分布的直方图, 然后按均衡直方图修正原图像。当图像的直方图为一均匀分布时, 图像包含的信息量最大, 图像看起来就显得清晰。该方法以累计分布函数为基础, 其变换函数取决于图像灰度直方图的累积分布函数。它对整幅图像进行同一个变换, 也称为全局直方图均衡化[5,6,7]。
2.2.2 对现有直方图均衡化算法进行改进
第一步 根据需要在灰度区间[M , N]上进行直方图粗均衡。 根据需要设定一个灰度区间[M , N], 对用 (1.1) 计算过后的tk进行整合变为t′k, 其中k为新的直方图的灰度数, 区间[M , N]和k需满足下式
主要是为了保证变换后灰度的次序不变, 在上述的前提下, 我们可以在区间[M , N]中根据k等分区间长度, 进行强制直方图的均衡。因此, 我们先要求的就是等分的长度h, 可用下式求得
然后就只需根据一定的映射关系改变t′i的灰度值, 进行新的直方图均衡化, 映射关系如下
经整理
具体的实现过程如下:
1) 给出原始图像的所有灰度级k=0, 1, 2, …, L-1;
2) 统计原始图像各灰度级的像素数nk;
3) 用p (tk) =nk/n计算原始图像的直方图;
4) 用 (4.11) 式计算原始图像的累积直方图;
5) 用 (4.12) 式进行取整计算;
6) 用t″k=M+k×int[ (N-M) / (k+1) ]进行均衡化;
7) 用p (tk) =nk/n计算新的直方图。
由于灰度的范围一般为0 ~255, 因此, 在本文的实验中取M=0, N=255, 所使用的数据来源于网络。在实际应用中, 可根据需要灵活的改变N和M的取值, 以求达到最佳效果。
第二步 通过一定得映射关系在尽可能保留原图像像素的基础上进行二次均衡, 以达到拓展使用的灰度空间。
减少转换过程中出现的像素个数较少的灰度被其周围的像素个数较多的灰度吞噬而造成信息丢失, 以及由此而产生的变换后图像所用灰度个数减少, 造成图像灰度层次感不强的现象, 是对传统算法的一个改进。通过分析式 (1) 可知:对于任意相邻两灰度i和i+1, 如果
采用的方法是建立一个满足下列要求的映射:假设原始图像中灰度i所具有的像素个数为ri, 映射后为r′i, 它们之间的关系为
对映射f的要求是其值域为正实数域。为了与原始图像保持一致, 该映射同时要求为单调递增。虽然每个ri都比以前小, 但Q′=
在传统算法中采用式 (1) 进行灰度转换, 其灰度转换规则不能充分利用灰度的低值部分, 如原始图像中的灰度为0, 极易被转换成非0灰度值, 且灰度为0的像素在原始图像中所占比重越大, 其转换后的值也就越大。因此将转换规则修正为
由式 (6) 所确定的灰度转换可以使转换后的灰度值分布于整个灰度空间, 这样可以将原始图像中的最大灰度值和最小灰度值分别映射成0灰度值和图像格式可以提供的最大灰度值n-1, 从而拓展了所使用的灰度空间。
第三步 首先, 用分频滤波器将图像分成低频和高频两个部分, 只对低频分量进行直方图均衡化, 然后, 将处理过的低频部分和高频部分进行合并, 再对合并后的信息进行中值滤波, 去除噪声, 得到最终增强的图像, 既保留了图像整体对比度和细节信息, 又去除了噪声放大的问题。
1) 将原始图像分频。
由于高斯低通滤波器在时域和频域上都具有比较好的平滑性能, 因此, 采用高斯低通滤波器对图像进行分频, 这样不会导致图像的细微结构发生极性反转。设原始图像为f (x, y) , 经过分频处理后, 图像f (x, y) 被分为两部分:低频部分fL (x, y) 和高频部分fH (x, y) 。低频部分fL (x, y) 含有原始图像的大部分灰度信息, 高频部分fH (x, y) 含有图像的少部分灰度信息。原始图像f (x, y) 与低频部分fL (x, y) 、高频部分fH (x, y) 间的关系可表示为
2) 将低频部分进行直方图均衡化。
对低频部分fL (x, y) 进行直方图均衡化 (HE) 处理。设均衡化之后的低频图像为f′L (x, y) , 则
此时, 低频图像f′L (x, y) 包含着的原始图像的大部分像素灰度级被均衡化分布, 动态范围得到提高, 大大改善了原始图像的对比度。高频部分fH (x, y) 含有原始图像的少部分灰度信息, 这少部分灰度信息包含着图像细节和图像噪声。
3) 将低频信息和高频信息合并。
将低频信息和高频信息进行合并, 设合并后的图像为g (x, y) , 则
由于
所以
合并后的图像g (x, y) 与原始图像相比, 既提高了整体图像的对比度, 又强化了图像细节, 但是含有高频部分的图像噪声。
4) 将合并后的图像进行中值滤波。
可对合并后的图像g (x, y) 进行中值滤波, 滤除图像中的噪声。中值滤波是一种非线性统计滤波器, 是抑制噪声的非线性处理方法。它是从一维信号中的滤波技术—中值滤波技术发展而来的。对于一维信号, 可以在图像画面中开一个一维的小窗口, 使其包含奇数个像素。按像素的灰度值从小到大排列起来, 然后用中间灰度值代替原排列的中间像素的灰度值。窗口然后从左到右移动, 直到边界。窗口下移一行, 再从左到右进行。
2.3 分析比较
2.3.1 仿真实验结果分析
图4和图5是为了验证本文所述的处理方法对低对比度图像的增强效果而专门制作的CAD图像和RGB彩色图像。通过对比图 (b) 和图 (c) 可以发现, 用本文所述的方法处理的图像, 层次感的增强效果明显好于用直方图均衡化方法处理的结果, 整体效果更是远比原始的直方图均衡化效果好的多[1,2,3,4,5,6,7,8]。
2.3.2 分析其优缺点
本文的均衡化算法在一定程度上改善了图像的整体效果, 而且图像噪声的到了很好的抑制。图像在层次感上明显好于原图像, 最大的有点就是在目视条件下图像的失真程度有所改善, 使原图像的灰度丢失率明显下降。就这个效果来说这个算法可以用来处理一些曝光不足的照片, 不过用这个处理照片的实用性还待考究, 因为他需要相当的专业素养。但同时也有很大的不足之处, 对灰度比较接近的图块之间的边界处的处理结果显示的不如原始直方图均衡化结果好。
3 结束语
传统的直方图均衡化算法是一种快速而有效的图像整体对比度增强算法, 但其缺点是容易造成图像细节信息丢失和图像噪声幅度增大。其实无论哪种图像增强手段都有他优点和缺点, 实际中我们完全可以尝试着探索一些这些方法的结合使用, 也许会得到意想不到的效果。在直方图均衡化算法的基础上, 本文所采取的处理方法可以有效防止图像细节信息丢失和图像噪声幅度增大。并经过实验证明, 本文所用的算法处理的图像, 整体视觉效果得到改善, 细节信息更为丰富, 从中可以提取出更有意义的图像特征。
参考文献
[1]朱秀昌, 刘峰, 胡栋.数字图像处理与图像通信[M].北京:北京邮电大学出版社, 2002.
[2] (英) Maria Petrou, (希) Panagiota Bosdogianni.赖剑煌, 冯国灿, 等.译.数字图像处理疑难解析 (Image Process-ing The Fundamentals) [M].北京:机械工业出版社, 2005.
[3]施晓红, 周佳.精通GUI图形界面编程[M].北京:北京大学出版社, 2003.
[4]李介谷, 施鹏飞, 刘重庆, 等.数字图像处理[M].上海:上海交通大学出版社, 1988
[5]阮秋琦.数字图象处理学[M].北京:电子工业出版社, 2001.
[6] (日) 谷口庆治.编.朱虹, 廖学成, 乐静, 等, 译.数字图像处理应用篇[M].北京:科学出版社, 2002.
[7]盛道清.基于多小波变换与图像融合的图像增强方法研究[J].武汉:武汉科技大学出版社, 2008.
蚁群算法参数分析 篇8
蚁群算法是受生物进化论的影响产生的,20世纪90年代初,意大利学者M Dorigo等人提出了最基本的蚁群算法(Ant Colony Algorithm,ACA),他们受到真实世界的蚁群的行为的影响,在观察蚁群集体觅食的过程中,发现蚁群寻找食物的特征,能迅速有效地找到食物,和我们所研究的寻优类问题极其相似,有助于对这类问题的求解。通过研究蚁群觅食得出的蚁群算法虽然能有效地找到问题的最优解和它比较强的鲁棒性,但是还存在着很多不足,比如收敛速度较慢、容易出现停滞等现象,基于上述问题,不少学者提出了改进的蚁群算法。由于算法当中涉及到多类参数,这些参数的数值对该算法的影响非常之大,一直得不到最佳的参数组合,这个问题困扰了不少学者,现对蚁群算法中所涉及的各个参数进行分析,以探寻解决旅行商问题的最优参数组,找到最佳的参数组合,使算法运行效率更高[1]。
1 旅行商问题
旅行商问题(Traveling Saleman Problem,TSP)一般译为旅行推销员问题、又称为货郎担问题,简称为TSP问题,是基本的线路问题,该问题是指某旅行者由起点出行,通过所有给定的城市,最后回到起点的最短路径。该问题的最早数学规划是由Dantzig(1959)等人所提出。在指定的n个城市之中,确定一条经过每个城市并且只有一次的最短路径。其图论描述为:给定一个图G=(V,A),其中V是所有城市的点集合,A为各个点之间相互连接构成的边的集合,已经知道每个点之间边的距离,要求确定一条路径最短的哈密顿回路,即遍历所有的点当且仅当一次的最短的路径。
2 蚁群算法的基本原理
通过模拟自然界中的蚁群所得到的蚁群算法主要思想来源于对现实世界蚂蚁在搜索食物的过程之中发现食物的合理路径的行为,表现出了较强的寻找最优路径的能力。在整个觅食的过程之中,蚂蚁之间互相散播信息素,相互交换所走过路径的信息,它们有着对信息素的敏感反映,感知到信息素的多少,来决定所要选择的路径。分析蚁群算法,以常见的旅行商问题为例,算法设计的主要步骤有如下[2]。
以n和m分别表示城市的数量和蚂蚁的数量,城市i和城市j间的直线路径我们用dij(i,j=1,2,…,n)表示,计算结果由欧式距离得出,t时刻,e(i,j)边上的信息素的量们用τij(t)表示。
1)初始化,每条路径上的信息素量设置成一样,设τij(0)=W(W为常数),在蚂蚁k(k=1,2,…,m)运动时,根据如下概率公式决定选择的路径。
式(1)中有:α表示运动轨迹相对重要程度,反应了蚂蚁在运动过程中所积累的信息在蚂蚁运动时所起的作用,其值越大,则该蚂蚁越倾向于选择其他蚂蚁经过的路径,β作为期望启发因子,表示路径可见程度的相对重要程度,其值越大,则该状态转移概率越接近于贪心规则,也就是说,越倾向于往能见度程度高的路径上行走;ηij则表示路径边e(i,j)的能见度程度;所求的概率(t)表示为在t时刻蚂蚁k由位置i转移到位置j的概率数,tabuk(k=1,2,…,m)表示蚂蚁k已经走过城市的集合,allowedk={1,…,n-tabuk}表示不在tabuk中的那些城市的集合,也就是允许下一步继续寻找的城市集合。
2)蚂蚁在运动中,当完成一次周游即到达所有城市之后,每条路径上的信息量按照以下的更新公式进行更新[3]。
式(2)中有:ρ的范围在0到1之间,它用来表示信息素τij(t)随时间而减少的量的程度,Δτij表示在循环之中路径e(i,j)上的信息变化量。
Δτkij(t)表示蚂蚁k在这次循环之中城市i和城市j路径之间留下的信息变化量。
式(4)中有Lk为蚂蚁k在这次循环之中所走路径总长;Q是常数,表示的是每只蚂蚁周游一次后所留下信息量。
陈一昭,等:蚁群算法参数分析
3)依次循环以上各步骤,循环次数达到算法给定最高次数后停止,得到最优解。
3 蚁群算法中的主要参数介绍
通过上面对蚁群算法的介绍,在整个算法的实现过程之中,有不少重要参数需要设定其初值,参数初值的设定对算法的性能影响很大,如何选取这些参数的数值,为提高算法性能有很大帮助,不仅可以提高算法的收敛能力,而且有利于寻找最优值。
首先介绍一些主要参数对算法的影响,需要分析的主要参数有α、β、m、Q、ρ[4]。
3.1 α对算法的影响
α是启发因子中的一个,它表现的是蚂蚁在搜索路径的运动过程之中对所积累的信息量指导蚁群搜索当中的相对重要度,α值越大,蚂蚁选择之前走过的路径可能性就越大,搜索路径的随机性自然就减弱,α越小,蚁群搜索范围就会减少,陷入了局部最优。
3.2 β对算法的影响
β是指的期望启发因子,它反映的是启发式信息在影响蚁群搜索的过程当中的相对重要度,它的大小影响着蚁群在整个寻优的过程中的先验性和确定性。β值越大,蚁群就越容易选择局部较短路径,这时算法的收敛速度是加快了,但是随机性却不高,容易得到局部的相对最优。
3.3 m对算法的影响
m是指的蚁群数量,蚁群数目在表面上来看,数目越多,得到的最优解就越精确,但是会产生不少重复解,随着算法接近最优值的收敛,继续循环只能是越来越接近最优解,信息正反馈作用降低,大量的重复工作,消耗了资源,增加了时间复杂度,所以一定要找到合适的蚁群数量。
3.4 Q对算法的影响
Q所指的是信息强度,信息强度表示的是蚂蚁所释放的信息量大小,蚂蚁在循环一次之后在所经过的路径上面所留下的信息素总量,这些信息量影响到算法的正反馈功能,让算法在正反馈作用下,能够有效的找到问题的最优解。
3.5 ρ对算法的影响
信息素挥发因子用ρ表示,则1-ρ表示所留下的信息素。ρ对蚁群算法的搜索能力和收敛速度的有影响。所以对ρ值的选择需要相当的谨慎,ρ过小时,在各路径上残留的信息素过多,导致无效的路径继续被搜索,影响到算法的收敛速率;ρ过大时,无效的路径虽然可以被排除搜索,但是不能保证有效的路径也会被放弃搜索,影响到最优值的搜索,使得收敛速率降低,并且影响到算法的全局搜索的能力[5]。
4 蚁群算法的实现步骤及程序结构流程
4.1 蚁群算法实现步骤
根据以下的基本蚁群算法,通过对算法中的各个主要参数进行分析调试,以求寻找到算法中各主要参数的最佳配置,算法具体实现如下。
1)参数初始化过程,时间t循环次数NC为0,且设置最大循环次数NCmax,将m个蚂蚁置于n个顶点上,n是城市的个数,蚂蚁禁忌表中索引号tabuk为1,初始时有向图上每边(i,j)的初始化信息量τij(t)为常数W,初始时刻Δτij(t)=0。
2)蚂蚁个体根据概率转移公式(1),得到概率,根据概率大小选择下一个城市j,寻找到了下一个城市j,此时j∈{C-tabuk}。
3)选择好下一个城市j之后,将蚂蚁移动到下一个城市j,并把j移动到蚂蚁个体的禁忌表中,ta-buk=tabuk+1。
4)在整个城市集合Z中元素未完全遍历完,则继续执行第2步,若已全部遍历,则执行第5步。
5)根据路径上信息量更新公式式(2)和信息量变化公式式(3)更新每条路径e(i,j)上信息量。
6)循环次数NC←NC+1。
7)根据结束条件,如果循环次数NC≥NCmax,则循环结束,输出程序计算的最佳结果,否则对禁忌表进行清空,跳转到第2步。
4.2 蚁群算法程序结构流程
5 各个参数对蚁群算法性能的影响
为对蚁群算法参数进行优化,首先利用仿真实验讨论分析参数值的选择对算法运行结果的影响,并据此确定参数的初始合理范围。由于算法中的参数选择尚无严格的理论依据,至今还没确定最优参数的数学解析方法,对于算法中的参数α、β、m、Q、ρ等主要是基于统计方法进行实验确定其取值范围。首先通过大量实验得到合理的参数值,然后分别讨论蚁群算法最优解与各个参数值之间的关系。试验中所用到的TSP数据都来源于TSBLIB中的Oliver30TSP,坐标如表1所示。根据实验将蚁群算法参数设置为如表2所示。
根据表2中设置的参数数值,通过单机实验,改变其中一种参数的数值,寻找该参数的最佳数值范围,以保证算法求得最短路径的稳定性,即平均路径,经过大量实验,统计实验结果,对实验结果数据求平均,得到平均路径值,如表3所示。
5.1 对启发因子α的分析
由表3可知,启发因子α的数值的改变,所求得平均路径值随之变化,它表现的是蚂蚁在搜索路径的运动过程之中对所积累的信息量指导蚁群搜索当中的相对重要度,对算法的随机性有影响,并且可以导致算法过早陷入局部的最优。从表3中α与平均路径之间的关系,可以看出当α等于0.8的时候,所求得的平均路径值最佳,进一步分析得到表4,α∈[0.7,1.1]之间时,可以保证算法求得最佳数值的稳定性。
5.2 对期望启发因子β的分析
由表3可知:期望启发因子β的数值的改变,所求得的平均路径随之变化,它表现的是启发式信息在指导蚁群搜索过程之中相对重要的程度,它的大小影响着蚁群在整个寻优的过程中的先验性和确定性。从表3中β与平均路径之间的关系,当β等于3.8的时候,所求平均路径值最佳,进一步分析得到表5,β∈[3.8,4.5]之间时,对算法的求解性能最好。
5.3 对蚁群数目m的分析
m是指的蚁群数量,蚁群数目在表面上来看,数目越多,得到的最优解就越精确,但是会产生不少重复解,随着算法接近最优值的收敛,继续循环只能是越来越接近最优解,信息正反馈作用降低,大量的重复工作,消耗了资源,增加了时间复杂度。从表3中m与平均路径之间的关系,当m等于60时,所求平均路径值最佳,进一步分析得到表6,当蚁群数目m等于58时,能够得到全局最优解,虽然蚁群数目增加也能得到最优解,但是增加了算法的运行时间,并且对算法的改进也起不到作用。
5.4 对信息强度Q的分析
信息强度Q表示的是蚂蚁所释放的信息量大小,蚂蚁在循环一次之后在所经过的路径上面所留下的信息素总量,这些信息量影响到算法的正反馈功能,让算法在正反馈作用下,能够有效地找到问题的最优解。从表3中Q与平均路径之间的关系,当Q等于400、500、600这些数值的时候,所求平均路径值最佳,进一步分析得到表7,当Q∈[400,950]时,能够得到全局最优解,若Q大于950,算法的求解性能会随之变差。
5.5 对信息素挥发因子ρ的分析
ρ对蚁群算法的搜索能力和收敛速度有影响。所以对ρ值的选择需要相当地谨慎,ρ过小时,在各路径上残留的信息素过多,导致无效的路径继续被搜索,影响到算法的收敛速率;ρ过大时,无效的路径虽然可以被排除搜索,但是不能保证有效的路径也会被放弃搜索,影响到最优值的搜索,使得收敛速率降低,并且影响到算法的全局搜索的能力。从表3中ρ与平均路径之间的关系,当ρ等于0.75时,所求平均路径值最佳,进一步分析得到表8,当ρ∈[0.7,0.9]时,能够得到全局最优解,算法性能也最好。
6 结论
近来年,不少学者了解到蚁群算法在智能寻优求解这类问题上的优越性,使之在很多领域有了广泛的以后,但是蚁群算法中参数的数值选择,一直没有权威的认证。采用Ant2Cyele模型,对蚁群算法中的主要参数进行了分析。通过大量的实验分析,研究参数的最初设置对蚁群算法求解性能的影响,找到最佳的参数数值范围,对以后深入蚁群算法的研究有深刻影响,从统计学角度,对数据进行处理,通过多次实验分析,验证和确定了数值范围,由以上实验结果可以看出,参数的初始设置对算法的影响非常之大。
参考文献
[1]彭喜元,彭宇,戴毓.群智能理论及应用.电子学报,2003;31(12A):1982—1988
[2]段海滨.蚁群算法原理及其应用.北京:科学出版社,2005
[3]李士勇,陈永强,李妍.蚁群算法及其应用.北京:科学出版社,2005
[4]尹莹莹,孙亮.一种进化型蚁群算法及其在TSP问题中的检验.计算机仿真,2006;23(4):167—173
标签抗冲突算法分析 篇9
标签由一个附着在天线上的高性能的微处理芯片构成, 芯片中存储唯一的EPC (Electronic Product Code) 电子代码, RFID阅读器通过无线信道识别标签, 每一个标签都有一个独一无二的ID号, 标签发送自己的ID号给阅读器, 阅读器在尽可能快的时间内对标签进行识别。然而, 阅读器在共用相同信道时, 在信号的频率相同时, 数据冲突便不可避免的。冲突又分为阅读器冲突 (Reader Collision) 和标签冲突 (Tag Collision) 。阅读器冲突是指, 当两个或两个以上的阅读器发出有重叠区的信号时, 将存在冲突。通常的解决办法是使用TDMA技术, 阅读器被要求在不同的时间接收信号, 这样就保证了它们之间不会互相干扰。标签冲突是指, 当有两个或两个以上的标签同一时刻向阅读器返回信息时发生的冲突。而被动标签由于自身不带有检测冲突的能力, 因此, 在RFID系统中, 被动式标签的抗冲突算法是一个关键技术。
1 抗冲突算法
1.1 ALOHA算法
解决标签冲突的算法一般分为两大类:一种是随机方式, 即阅读器要求区域内标签采用随机应答的方式来处理。如:ALOHA算法、时隙ALOHA (Slotted Aloha) 、帧—隙ALOHA (Frame-slotted ALOHA) 算法。另一种是确定性方式, 阅读器将冲突区域内标签依据某种策略不断划分为更小的子集, 直至每个标签都被识别出来, 如二进制树 (Binary tree) 算法。
ALOHA算法是70年代由夏威夷大学的Norman Abramson及其同事提出的, 目的是为了解决无线通信多路访问信道的分配, 但其基本思想适用于任何无协调关系的多用户竞争单信道使用权的系统。其思想为:在标签发送数据的过程中, 若有其他标签也在发送数据, 那么将发生信号重叠从而导致完全冲突或部份冲突。阅读器检测接收到的信号来判断是否发生冲突, 如果有冲突, 阅读器发送命令给标签让其停止发送信号, 随机等待一段时间后再重新发送信号。这种算法简单, 但效率较低, 信息最大吞吐率为18.4%。
瑞士Harald Vogt提出的时隙ALOHA算法将阅读器的问询帧分为若干个时隙, 区域内标签随机选择一个时隙进行应答。时隙 (slot) 是阅读器向标签发送一条指令以及标签返馈这条指令的时间长度。时隙ALOHA (Framed slotted Aloha, 简称FSA) 算法是基于通信领域的ALOHA协议提出的。在FSA中, “帧” (Frame) 是由读写器定义的一段时间长度, 其中包含若干时隙。标签在每个帧内随机选择一个时隙发送数据。所有标签应答同步, 即只能在时隙 (Slot) 开始点向读写器发送信息, 每个标签发送的时隙是随机选择的。
读写器当前使用帧的长度为N, 标签数为n, 在一个时隙中存在r个标签的概率为:
当r=1时, 表示一个时隙只有一个标签, 即成功读取的时隙。因此, 在一个阅读周期中读取标签数的期望值为:
式 (2) 中, 帧长度为N, 标签总数为n。
系统效率为PN:
ALOHA不能完全避免冲突, 随之而来将产生“标签饥饿问题”, 即系统在很长时间内无法识别认证特定的标签。为解决上述问题, 采用传统二进制树协议在解决RFID领域的“标签饥饿问题”获得了广泛的运用。
1.2 二进制树形算法
二进制数形算法 (Binary Tree Protocol) , 它不会产生“标签饥饿”问题, 但可能会产生相对来说长一些的时间延迟[9]。此算法不断地将发生冲突的标签集一分为二, 直到所有的标签被阅读器所识别。
其基本思想是:阅读器发送阅读命令后, 所接收命令集合的标签将反馈信息。如果该集合里不只一个标签, 那么多个标签传输时将会发生冲突。当冲突发生时, 根据标签的ID, 系统将冲突的标签划分为二个子集。阅读器将识别每个子集, 持续这种二分过程直到标签全部无冲突地被识别出来。因此, 在BT中, 标签识别过程的性能取决于如何有效地划分子集。
当产生了冲突的标签时, 系统计数器被初始化为0, 由阅读器发出一个应答信号, 根据这个信号, 标签选择一个二进制数字与自己的计数器中的值相加, 这样一个集合就自动划分为了2个子集。如果冲突存在, 没有产生冲突的标签将自己的数字加1, 如果阅读器没有发现冲突, 则全部标签将自己的数值减1, 被阅读器识别出来的标签不发送任何信号直到这一轮识别过程终止。
阅读器也分配了计数器用于终止识别过程, 在每个识别过程中, 初始化为0, 其计数器的值用于指示还待识别的标签集的个数, 如果产生了冲突, 则阅读器的计数器加1, 否则减1, 当其数值小于0时, 则表明待识别标签被识别, 所有标签已被完全识别, 终止此过程。
1.3 查询树协议
查询树协议 (Query Tree Protocol, 简称QT) , 使用标签的ID来划分标签集。
其基本思想:阅读器每次查询发送的是比特前缀, 只有当ID与这个查询前缀相符的标签才响应阅读器的命令并发送其ID, 当只有一个标签响应时, 阅读器成功识别该标签, 如果多个标签响应时产生冲突, 阅读器将在下一次循环中把查询前缀增加一个比特1或0, 这样标签集就被划分为2个子集了, 阅读器中设有一个队列Q来补充前缀, 这个队列Q用0和1来初始化。读写器从Q中查询前缀并在每次循环中发送此前缀。当前缀p0p1…pi是冲突前缀的标志, 所查询的前缀被阅读器设为p0p1…pi0, 把前缀p0p1…pi1入队Q中。当队列Q为空时, 阅读器将终止操作。通过增加和减少查询前缀的方案, 实现所有标签能被阅读器识别。
相对于BT, QT算法也称无记忆协议, 因为标签除用来识别ID外, 无其他的存储内容。其识别延迟最主要的影响因素是标签ID的分配, 如果标签有很多类似的ID时, 延迟就会增加。
2 ISO 14442A协议中抗冲突方法
14443A标准定义是基于二进制树的防碰撞的抗冲突算法, 属于TDMA的一种。MIFARE卡内有4字节的全球惟一序列号UID, 而最终确定MI-FARE卡的UID是阅读器防冲突处理的最终目的。其工作流程示意图如图一所示。
从图一可以看出, 在阅读器与Mifare one卡之间通信的过程中, 通过MCM接收卡序列号, 至少有1位既是0又是1 (即该位的前、后半部都有副载波调制) , 每次都需要检测冲突位置。如果在通信过程中设置一个堆栈, 用于保留上一次冲突的位置和方便回溯, 那么就可以节省阅读器与卡片之间查询、应答的次数, 提高了阅读器的工作效率。
为了防止卡片出现数据干扰, 本文采用基于栈的动态后退式二进制树形搜索算法来防止卡片冲突。
由于RFID系统通信具有带宽限制, 因此, 系统需优化读写器和标签间传送的信息比特的数目来提高其效率。在经典的二进制树型算法中加入栈结构后进行如下操作:
(1) 当阅读器检测到碰撞后, 下一次阅读器在请求命令中只发送搜索序列号中的最高位和最高碰撞位之间的部分作为搜索依据, 然后中断传输, 在与最高位和最高碰撞位之间的部分相同的电子标签响应并送回它们序列号的剩余各位, 即最高碰撞位之后的比特位作为应答。避免了序列号中多余部分的传输, 数据传输时间明显缩短。
(2) 通过在阅读器中设置堆栈的方式, 用以保留阅读器发送的所有前缀比特, 依次进行入栈出栈操作, 而最终当栈为空时, 说明全部标签都被识别出来了。通过这种方式减少读写器与标签间传送的通信次数, 提高了识别效率。
3 结束语
本文总结了几种常用的被动式标签的抗冲突算法, 对它们之间的不同作了比较, 并研究了ISO14442A协议中基于栈结构的后退二进制抗冲突算法。
摘要:通常的RFID系统中, 阅读器通过共享无线信道的通信来识别标签。如果多个标签在同一时间内发送自己的ID给阅读器, 必定产生冲突。为了解决冲突问题, 通过使用抗冲突算法保证标签的识别。为保证实现阅读器正确、快速获取标签数据, 抗冲突算法的选择成为核心问题。本文简单地介绍了几种抗冲突算法。
关键词:ALOHA,二进制树形,查询树协议,ISO 14442A协议
参考文献
[1]周晓光, 王晓华, 王伟.射频识别 (RFID) 系统设计、仿真与应用[M].北京:人民邮电出版社, 2008.
[2]程曦.RFID应用指南——面向用户的应用模式、标准、编码及软硬件选择[M].北京:电子工业出版社, 2011.
光流算法比较分析研究 篇10
关键词:光流算法,车辆检测,智能交通,计算机视觉
0 引 言
基于视频的运动目标检测的目的就是要在序列图像中将运动目标从场景中提取出来。但是由于光照的影响、风吹、树叶摆动、运动目标阴影、摄像机抖动以及运动目标的遮挡现象给运动目标的正确检测造成了极大的困难。运动目标能否正确检测和分割影响着后续运动目标能否正确跟踪与识别,因此运动目标检测成了计算机视觉中的一项重要课题。传统的运动目标检测方法有光流算法[1,2],帧间差分法[3],背景建模法[4]和运动能量法[5]。背景建模法通过建立背景模型,然后将当前帧中每个像素点与背景模型进行比较来确定背景图像。但是背景往往会随着时间的推移发生变化,需要时刻更新背景图像,需要背景图像自适应的更新。帧间差分法可以适应环境的动态变化,可以实现运动目标的实时检测,但检测出的目标存在空洞严重且不连续。
光流场是指图像灰度模式的表面运动[6],光流是三维运动场在二维图像平面上的投影;研究光流算法是利用图像序列中灰度的时域、空域变化和相关性来确定图像像素的运动矢量,也就是研究图像灰度在时间上变化的大小和方向。研究光流算法的目的就是从图像中得到运动目标的运动矢量。因为光流的计算不需要预先知道场景的信息,不需要在图像中建立起特征之间的对应关系,所以光流计算属于高层次的视觉表述。目前,光流法被广泛地应用于目标检测、跟踪、识别、物体弱运动,步态分析、消除波动性干扰、3D结构恢复以及运动估计等图像处理与模式识别领域,也广泛地应用在智能交通、医疗、导航与制导、海洋、军事和天文等领域。
1 研究现状
光流由Gibson于1950年首先提出,在光流的基本约束方程提出之后得到广泛发展。80年代初期,Horn和Schunck提出建立在光流平滑性假设基础上的使全局能量达到最小化原则的全局光流算法[7],可以得到百分之百的稠密光流场。之后Lucas和Kanade提出了使用局部领域最小二乘法来计算光流的局部光流算法,之后就掀起了光流研究的热潮,提出了很多种方法。根据数学方法和相应理论基础可以将光流算法分为基于梯度的方法、基于区域的方法、基于能量的方法、基于相位的方法和神经动力学法。然而在计算光流的时候,大位移和孔径问题是光流计算的难点,因为从图像灰度的变化不能确定像素的真实运动矢量[8]。
1.1 基于梯度的方法
基于梯度的方法又称为微分法,利用时空梯度函数,使得全局能量泛函达到最小化来计算像素的速度矢量。由于微分法具有强大的数学理论支持,所以得到了广泛研究和应用。常用的代表有Lucas-Kanade局部平滑法[9]、Horn-Schunck全局平滑法[7]、以及Nagel的有向平滑法[10]。Horn-Schunck光流法是在光流基本约束方程的基础上附加了全局平滑假设,使得泛函能量函数达到最小化。Lucas和Kanade使用局部平滑假设,假设一个窗口内的所有像素具有相同的运动矢量。Nagel采用有向平滑约束假设,使用加权Hessian矩阵对梯度进行不同方向上的平滑处理。Black和Anandan提出分段平滑的方法来对多目标进行估计[11]。
微分法假设光流是连续的,再附加一定的约束条件,将光流的计算问题转化成最小化泛函能量的数学极值问题。成熟的数学优化理论为求解光流矢量创造了条件。
1.2 块匹配法
匹配法,也叫区域匹配法,研究的是区域匹配问题,块匹配法认为上一帧中某个区域,在下一帧中会形成对应的模式,块匹配光流定义为相邻两帧中,相应区域块之间产生最佳拟合的位移。假设连续两帧图像f1和f2,对于图像f1中的每个像素点(x,y),以此像素为中心建立一个大小为16×16的相关窗Wc,一般来说16×16大小的块已经可以满足要求了,再围绕图像中对应点(x,y),建立一个图像搜索窗Ws,搜索窗口不能太小也不能太大,可根据最大可能位移的先验知识来确定。相似性度量一般常用像素差平方和(SSD)、平均绝对误差(MAD)以及均方差误差函数(MSE)来进行。可进行各种快速搜索算法如三步搜索法来进行搜索,使得误差函数达最小值的位移就是光流矢量。
1.3 基于能量法的方法
在频率域中设像素点X=(x,y)的速度为V,V=(u,v)T,根据式(1):
进行傅里叶变换,结果如下:
式中δ(⋅)为狄里克利函数。
使用基于能量的方法来计算光流是利用调谐滤波器的输出能量达到最大来计算光流,调谐滤波器是在频域中进行设计的,因而基于能量的方法也叫做基于频率的方法。Heeger等人建立了一个在式(1)和式(2)的基础上,进行局部光流计算的模型[12],成为基于能量法的代表。Heeger在频率空间平面和时空能量上采用最小二乘法拟合来估计光流,使用Gabor滤波器来提取局部能量,Gabor滤波器有多个尺度参数,多个方向,它们是对不同频率和方向的调谐。对于一个简单的平移运动,Gabor滤波器的响应都集中在一个平面上。使式(3)最小化,即可求得光流:
1.4 相位法
相位信息用以计算光流由Fleet和Jepson首次提出[13]。在计算光流的时候图像上的相位信息往往比亮度信息更加可靠。所以利用相位信息获得的光流场更加具有鲁棒性。
将二维图像变换到频率域中,变换如下:
式中n=(sinα,-cosα),α是图像的属性角。
通过带通滤波器,图像的相位为:
式中:ρ为滤波器输出的幅值;为相角。
最后,光流为:
式中:s代表速率;n代表法向单位矢量;为相位梯度。
2 光流的几种计算方法
2.1 HS全局光流算法
Horn-Schunck在光流基本约束方程的基础上,结合光流全局平滑条件,既在相邻像素间光流不会突变,从而解决了孔径问题。其假设光流场同时满足基本方程和全局平滑条件。
全局平滑条件可以用光流矢量梯度平方来表示:
式中:u,v分别是x,y方向上的光流。
这个值越小表示相邻像素间变化越小,光流场越平滑。设ec2为全局平滑表达式为:
光流基本约束方程就是要使得相邻两帧间像素偏差达到最小,设eb2为光流基本约束条件,表达式为:
要求得光流矢量就是要使得ec2和eb2都到达最小,就是要使得式(10)的泛函能量达到最小值。
求解式(10)使得Ehs达到最小值的方法是解欧拉方程,使得Ehs关于u,v的导数为零。采用递归算法最后得到光流值为:
当n=0时就是光流的初始值,这个值影响着光流的收敛速度,当相邻两次迭代后光流值之差小于一个很小的数时,迭代结束,调节λ可以调节平滑约束量的比重。
2.2 LK局部平滑光流算法
局部平滑约束由Lucas和Kanade首次提出,假设图像局部平滑,即假设在一个较小的空间领域Ω上运动矢量保持衡定,通过联立窗口内所有像素,使用最小二乘法估计光流,能得到稀疏光流场,具有较强的鲁棒性。
在一个较小的空间领域Ω上,引入权系数后光流估计误差定义为:
式中:W(x)表示窗口权重函数,窗口中心部分对光流约束的贡献大,权重要高。
通过最小二乘法来求解式(13)可以得到:
但是当ATW2A不可逆的时候,光流场无解。
2.3 BM块匹配光流算法
块匹配光流算法是将视频划分为确定大小的图像子块,每个图像子块中所有像素假设具有相同的位移,也就是说具有相同的光流场,每个图像块只做平移运动,这样只要每个图像子块只要计算一个光流矢量就可以得到整个图像块中的所有像素的运动矢量。当块比较小时,假设图像子块中具有相同的位移是成立的。
2.4 PryLK金字塔光流算法
传统的光流算法只有在小位移的条件下才满足灰度连续性假设,而在大位移下图像灰度将不连续,造成光流估计失败。
为了计算运动目标快速移动情况下的光流,引入了在LK局部平滑光流算法的基础上进行金字塔分层迭代来计算光流场。将图像进行金字塔分层,在金字塔的最上层图像的分辨率最低,这样由最上层开始计算光流值,计算的结果加上上一层的初始值作为下一层的光流初值,再对下一层计算光流场,在除最高层外的其他层进行光流迭代,迭代到最后一层就形成光流矢量。
3 四种光流算法性能分析
通过上述四种光流算法的原理,以路口车辆视频为例,用上述四种光流算法分别进行实验,设计了一个演示界面。实验平台为:VC 6.0,Opencv 1.0,Windows XP,Intel Pentium Dual Cor-e,1.86 GHz(2CPU),1G RAM,测试图像为640×480。实验结果如图1所示。
由图1可知,LK光流算法的计算时间为15 ms,HS光流算法的计算时间为62 ms,PryLK金字塔光流算法的计算时间为15 ms,BM块匹配光流算法的计算时间为16 ms,其中箭头代表光流矢量的方向,横线长度代表光流的大小,通过各种光流算法的计算时间分析可知,HS光流算法消耗的时间最多,PryLK光流算法消耗时间最少,因为HS光流算法是对图像中的每一个像素计算光流场,而PryLK光流算法是对特征点计算金字塔光流场。
各种算法满足实时性要求只是最基本的要求,关键是比较车辆检测的效果,通过观察图1可以得到如下结论:BM块匹配、HS光流算法都有较大的干扰,因为HS光流算法是全局光流算法,对噪声比较敏感,但却能得到稠密的光流场。LK和PryLK光流算法对噪声具有一定的鲁棒性,但只能得到稀疏的光流场,在实验中通过光流场的计算可以得到运动矢量,包括运动速度和运动方向,所以说根据光流算法来进行车辆检测可以得到车辆的速度与方向,这是其他车辆检测技术不可比拟的。利用光流的方向可以在路口进行逆行检测,利用光流速度可以对车辆超速违章进行检测。
4 光流技术的研究方向
光流算法可以得到运动点的速度和方向,通过光流场的分析可以得知光流技术的研究方向有如下几点:
(1)通过光流算法得到全局光流场,对光流场进行聚类分析,检测运动物体。
(2)可以通过分析光流场,解决由于相机抖动,或则树叶的摆动等引起的波动式干扰,因为这些波动式干扰造成光流矢量呈现周期性变化的趋势。
(3)通过光流预测进行运动目标的跟踪。
(4)光流法可以得到亚像素级的运动矢量,可以用光流技术进行步态分析。
(5)由于光流法是计算物体间的相对运动,所以可以用光流技术来实现动态背景下的目标检测与跟踪。
数据挖掘中聚类分析算法性能分析 篇11
关键词:数据挖掘;聚类分析算法;性能分析
中图分类号:TP311.13;TP18 文献标识码:A 文章编号:1674-7712 (2014) 16-0000-01
在技术水平的发展之下,数据挖掘技术也得到了迅速的发展,在传统领域下,数据挖掘技术仅仅是基于统计学与计算机技术基础上产生的技术,目前,数据挖掘技术已经在各个行业中得到了广泛的应用,其最大的目标市场主要集中在数据集市、数据仓库与决策支持业界之中,下面就针对数据挖掘中聚类分析算法的性能进行深入的分析。
一、数据挖掘中聚類分析算法的应用
聚类就是将数据集划分不同类的一个过程,不同聚类数据对象相似度小于同一个聚类对象相似度,在使用聚类分析方法应用数据集后便可以帮助研究人员分析出数据集的稠密区域与稀疏区域,辨别出各个数据之间的相关性。将聚类分析法应用在商业领域可以帮助研究人员对客户群体进行深入的挖掘,并根据客户群体的消费心理与特征来制定营销策略;将聚类分析法应用在生物学领域能够帮助了解人员了解人类的基因;将聚类分析法应用在经济领域中能够帮助研究人员来评价各个地区的经济发展能力。同时,聚类分析还可以帮助用户挖掘出网页中的有用信息,聚类分析能够作为独立工具,也可以与其他数据挖掘算法进行联合使用。
二、聚类分析算法的应用要求与方法简介
聚类分析算法的应用需要满足几个特性,这包括可扩展性、不同类型属性处理能力、任意形状聚类、减少输入参数量、噪声数据处理力、高维问题、约束聚类几个内容。根据处理数据目的、要求与类型的不同,聚类分析算法可以分为几种不同的形式,其中代表性的算法有层次方法、划分方法、基于网格算法与基于密度算法。
(一)层次方法
层次方法是一种层次广泛的分析方法,层次方法有两种类型,即自上而下分析法与自下而上分析法,前者强调将数据对象作为独立分组,对这些对象组进行合并处理,直至满足终止条件;后者将所有对象作为一个分析,逐步将其分为小组,直至满足终止条件。常用的分析法有CURE算法与BIRCH算法两种类型。
层次方可可以得出粒度不同的多层次聚类结构,但是,由于各类因素的影响,这一分析法也有一些缺陷,其中最大的问题就是难以进行回溯,在分析的时候必须要考虑到这一问题。
在进行计算时,需要按照相似度来进行分析,也能够将不相似的部分分离开来,判断各个类的相似性,再根据距离来计算出类与类的差异度。
层次分析法引入了聚类特征树与聚类特征,是针对大规模数据的一种算法,该种算法可以有效减少数据处理量,在完成压缩之后也能够满足聚类信息需求,也不会影响聚类的质量。此外,该种算法只要进行一次扫描即可完成聚类,但是,该种算法只能够使用直径与半径概念进行分析,因此,只能够用于对象为球形的计算中,如果数据输入顺序不同,那么就很可能产生不同的聚类结果。
(二)分析方法
使用分析方法可以将数据集划分为k个聚类,这些聚类需要满足几个条件:(1)聚类是要包含一个及以上数据对象的;(2)每一个数据对象只与一个聚类相关,对于一些模糊划分方法,能够适当放宽要求。
对于所有聚类,都需要使用优化的分析方法进行划分,缩小聚类对象距离,分析划分方法质量的标准就是聚类相似度,理想的划分方法能够提升数据对象相似度,常用的划分法包括K-medoids算法与K-means算法两种类型。
(三)基于网格方法
基于网格方法强调将对象空间划分成网格结构,这些网格结构的数目单元是有限的,一般情况下,如果划分过于粗糙,就会影响边界的清晰度,如果划分过于细致,也会导致小聚类数量过多。为此,在使用网络分析法时,就需要从小单元先进行聚类,在逐步增加其体积,指导聚类质量达到标准。
划分对象网格数对于数据库集处理时间有着重要的影响,这会有效简化个数对于数据的影响,这即可有效提升网格分析法的处理速度。
假设N为数据库对象数据,且N无限大,数据对象特征会产生d维特征空间,在进行计算时,数据复杂度是o(N),在对象扫描完成后需要将其分配到相应单元中,若特征空间一个维有m个单元,就一共会出现md个单元,在下一步,就可以使用小波转换来进行处理,建立好查询表,在数据引入其中之后,即可处理相关数据,这些数据复杂度与数据对象数是没有直接关联的,算法时间复杂度即为o(N)。
(四)基于密度算法
基于密度算法可以分析出各种形状聚类,这一算法主要通过获得聚类到相邻密度阈值获取结果,该种算法可以起到很好的除燥作用,挖掘出形状不同的聚类,其中最为常用的基于密度算法就是DBCLUES、OPTICS与DBSCAN。
三、结束语
总而言之,聚类分析已经在数据挖掘领域中得到了广泛的使用,聚类分析算法可以分为几种不同的形式,其中代表性的算法有层次方法、划分方法、基于网格算法与基于密度算法。每一种算法都有其不同的特征与适用性,层次方法适宜用在不同粒度多层次聚类结构的分析;划分方法多用于球形聚类形状;基于网格算法能够迅速处理数据对象;基于密度算法可以能够有效消除噪声,相信在大数据时代的发展下,聚类分析技术定可以得到更加广泛的使用。
参考文献:
[1]王成,王继顺.基于因子分析与聚类分析的学生成绩综合评价[J].甘肃联合大学学报(自然科学版),2011(01).
[2]王亮红,宋代清,徐娜.聚类分析在学生成绩分析中的应用[J].东北电力大学学报(社会科学版),2009(04).
[3]刘思,徐静瑞,张建伟.基于蚂蚁孵化分类行为的聚类算法[J].郑州轻工业学院学报(自然科学版),2009(05).
动态规划算法分析与研究 篇12
动态规划算法是运筹学的一个分支, 是求解决策过程最优化的一种数学方法, 也是解决NP问题行之有效的解决方案之一。动态规划算法将一个复杂的多阶段问题转换为一系列单阶段问题, 利用各阶段之间的关系, 逐个求解, 由美国数学家R.E.Bellman等[1]最早提出。
动态规划算法是以牺牲存储空间换取计算效率的算法。在实际应用中, 可将某活动过程分成若干个相关联的阶段, 每一阶段都需要作出决策, 从而使整个过程达到最优效果。本文就动态规划算法进行综述, 并就0-1背包问题展开探讨, 具体分析动态规划算法的思想。
1 基本原理
1.1 动态规划算法分类
动态规划一般可分为线性动态规划、区域动态规划、树形动态规划、背包动态规划等4类。如导弹拦截问题是线性动态规划算法的典型应用;统计单词个数等问题是区域动态规划的典型应用;二分查找树问题是树形动态规划的典型应用;0-1背包问题是背包类动态规划算法应用。
1.2 动态规划算法基本原理
动态规划算法的基本思想是将问题分解成若干互相关联的阶段, 将子问题在各阶段按照一定的次序排列, 对某个给定的阶段状态先求解子问题, 然后从子问题的解中得到原问题的解。对于重复出现的子问题, 只在第一次遇到时对它进行求解, 并将求得的解保存起来, 以备后续状态中再次使用。如图1所示, 即解决A问题;依赖于解决阶段B的若干个子问题, 解决B阶段问题依赖于解决C阶段的若干个问题, 以此类推直至所有问题解决。
从基本原理可知, 每一次新的“特例”问题的求解结果都需要保存在临时表中, 因而耗费一定计算空间;另一方面, 由于新的计算过程可通过已经存在的结果加以计算, 从而降低了计算的时间复杂度, 也符合发现问题、求解问题、知识积累学习、知识再利用的基本思想。
1.3 适用范围
动态规划算法适用一定的范围和前提约束, 超出了特定条件, 便失去了作用。动态规划的问题必须满足最优化原理和无后效性。具体如下: (1) 最优化原理。一个最优化策略不论过去状态和决策, 对前面决策所形成的状态而言, 余下的各决策必须构成最优策略, 是典型的局部最优化; (2) 无后效性。将各阶段按照一定的次序排列后, 对于某个给定的阶段状态, 此前各阶段的状态无法影响未来的决策。即对于已经解决的子问题, 不会被后续问题所改变, 又称为无后效性; (3) 子问题的重叠性。动态规划将原来具有指数级时间复杂度的搜索算法改进成具有多项式时间复杂度的算法。其中的关键在于利用空间冗余保存过程知识, 这是动态规划算法的根本目的。动态规划实质上是一种以空间换时间的技术, 在实现过程中, 不得不存储产生过程中的各种状态, 所以其空间复杂度要大于其它算法。
2 动态规划算法应用实例———0-1背包问题
用动态规划算法求解实际问题时, 首先要建立动态规划模型, 一般需要进行如下几个步骤: (1) 分析问题, 界定最优解的特征; (2) 划分问题阶段, 定义阶段计算目标; (3) 求解阶段结论, 形成决策机制, 存储知识集; (4) 根据计算最优值时得到的信息, 构造出一个最优解; (5) 设计程序, 编写相应代码[2]。
例如0-1背包问题, 空间复杂度O (S) =N*C, N=物品个数、C=背包容量, 最优解为选取n件物品 (0≤n≤N) , 使得V最大;背包问题是N阶段问题, 每个阶段有j个子问题, 状态定义为在C=j, N=i的状态如何决策的过程, 决策函数为f (i, j) , 分析可知f (i, j) 决策如式 (1) 所示, 其中v (i) 是第i个背包的V值, 此为决策的核心算法[3]:
当v (i) ≤j时, f (i, j) 取f (i-1, j-v (i) ) +v (i) 和f (i-1, j) 的最大值;当v (i) >j时, 第i个背包无法放入, 因而求解f (i, j) =f (i-1, j) 。
式 (1) 中, f (i-1, j) , f (i-1, j-v (i) ) 都已求解, 因而f (i, j) 可以计算出来。
3 动态规划算法与贪心算法比较
动态规划算法和贪心算法都是解决最优问题的递推类经典算法, 均由局部最优解来推导全局最优解, 因而这两个算法具有相似性。但两者之间也有着显著差异。
贪心算法每步决策都无法改变, 且成为最终决策方案中的一个确定步骤, 其每一步均是在已经抉择的结果集外的最优选择, 前面决策结果不保存并为后续决策的过程引用, 如式 (2) 所示。
动态规划算法全局最优解中一定包含某些局部最优解, 但当前状态的最优解不一定包含前一个状态的局部最优解, 因而它和贪心算法不一样, 需要计算出每个状态 (每一步) 最优解, 并保存起来备后续状态计算引用。
贪心算法在时间复杂度、空间复杂度方面优于动态规划算法, 但“贪心”判定规则 (决策依据) 却难以确定, 即V (x) 函数的选取, 使不同的决策依据得出的结论可能不一致, 影响最优解的生成。
利用动态规划算法解决符合条件的问题时, 一般可以在有限时间内解决问题, 但该算法需要暂存已经计算的结果, 因而动态规划需要很大空间。虽然可以使包含同一个子问题的所有问题共用一个子问题解, 从而体现动态规划的优越性, 但是以牺牲空间为代价的。为了有效访问已有结果, 加上数据不易压缩存储, 因而空间矛盾比较突出。动态规划的高时效性往往要通过大的测试数据体现出来。因而, 如何在不影响运行速度的条件下, 解决空间溢出问题, 是动态规划需要解决的, 也是今后研究的热点问题[4]。
4 结语
本文就动态规划算法的基本概念、应用场景、适用范围、基本原理进行阐述, 并结合0-1背包动态规划法具体求解过程、思路进行分析, 比较动态规划算法和贪心算法的异同点, 指出规划法存在的空间复杂度大等问题, 对理解动态规划法的意义提供参考和指导。
参考文献
[1]百度百科.动态规划[EB/OL].http://baike.baidu.com/view/28146.htm, 2013-12-06.
[2]周佳, 蒋玉明.遗传算法和动态规划综述[J].2009, 16 (2) :18-19.
[3]孙建中.0/1背包问题动态规划算法的探讨[J].现代计算机, 2005, 12 (4) :106-107.
【分析算法】推荐阅读:
程序算法分析07-18
独立分量分析算法07-02
聚类分析算法08-31
导线计算算法分析09-07
算法分析复习总结07-23
遗传算法存在问题分析08-29
算法的概率分析09-01
算法设计与分析论文06-20
数据流分类算法分析06-27
选课算法的分析与改进07-23