蛮力算法_精品文档PPT文件格式下载.ppt

上传人:b****2 文档编号:15500048 上传时间:2022-11-02 格式:PPT 页数:29 大小:24.48MB
下载 相关 举报
蛮力算法_精品文档PPT文件格式下载.ppt_第1页
第1页 / 共29页
蛮力算法_精品文档PPT文件格式下载.ppt_第2页
第2页 / 共29页
蛮力算法_精品文档PPT文件格式下载.ppt_第3页
第3页 / 共29页
蛮力算法_精品文档PPT文件格式下载.ppt_第4页
第4页 / 共29页
蛮力算法_精品文档PPT文件格式下载.ppt_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

蛮力算法_精品文档PPT文件格式下载.ppt

《蛮力算法_精品文档PPT文件格式下载.ppt》由会员分享,可在线阅读,更多相关《蛮力算法_精品文档PPT文件格式下载.ppt(29页珍藏版)》请在冰豆网上搜索。

蛮力算法_精品文档PPT文件格式下载.ppt

W=7V=$42W=3V=$12W=4V=$40W=5V=$25背包物品1物品2物品3物品410(a)内蒙古农业大学职业技术学院蛮力法子集子集总重量总重量总价值总价值0$017$4223$1234$4045$251,210$361,311不可行1,412不可行2,37$522,48$373,49$653,49$651,2,314不可行1,2,415不可行1,3,416不可行2,3,412不可行1,2,3,419不可行内蒙古农业大学职业技术学院蛮力法33分配问题分配问题有n个任务需要分配给n个人执行,一个任务一个人。

(意思是说,每个任务只分配给一个人,每个人只分配一个任务。

)对于每一对i,j=1,n来说,将第j个任务分配给i个人的成本是Ci,j。

该问题要找出总成本最小的分配方案。

任务1任务2任务3任务4人员19278人员26437人员35818人员47694内蒙古农业大学职业技术学院蛮力法cost=9+4+1+4=18cost=9+4+8+9=30cost=9+3+8+4=24cost=9+3+8+6=26cost=9+7+8+9=33cost=9+7+1+6=23用穷举法查找解决一个小规模分配问题的最初几次循环内蒙古农业大学职业技术学院104百钱百鸡问题。

中国古代数学家张丘建在他的算经中提出了著名的“百钱百鸡问题”:

鸡翁一,值钱五;

鸡母一,值钱三;

鸡雏三,值钱一;

百钱买百鸡,翁、母、雏各几何?

算法设计1:

通过对问题的理解,读者可能会想到列出两个三元一次方程,去解这个不定解方程,就能找出问题的解。

这确实是一种办法,但这里我们要用“懒惰”的枚举策略进行算法设计:

设x,y,z分别为公鸡、母鸡、小鸡的数量。

尝试范围:

由题意给定共100钱要买百鸡,若全买公鸡最多买100/5=20只,显然x的取值范围120之间;

同理,y的取值范围在133之间,z的取值范围在1100之间。

约束条件:

x+y+z=100且5*x+3*y+z/3=100蛮力法内蒙古农业大学职业技术学院11算法1如下:

main()intx,y,z;

for(x=1;

x=20;

x=x+1)for(y=1;

y=34;

y=y+1)for(z=1;

z=100;

z=z+1)if(100=x+y+zand100=5*x+3*y+z/3)print(thecocknumberis,x);

print(thehennumberis,y);

print(thechicknumberisz);

算法分析:

以上算法需要枚举尝试20*34*100=68000次。

算法的效率显然太低蛮力法内蒙古农业大学职业技术学院蛮力法算法设计2:

在公鸡(x)、母鸡(y)的数量确定后,小鸡的数量z就固定为100-x-y,无需再进行枚举了此时约束条件只有一个:

5*x+3*y+z/3=100内蒙古农业大学职业技术学院蛮力法算法2如下:

y=33;

y=y+1)z=100-x-y;

if(zmod3=0and5*x+3*y+z/3=100)print(thecocknumberis,x);

以上算法只需要枚举尝试20*33=660次。

实现时约束条件又限定Z能被3整除时,才会判断“5*x+3*y+z/3=100”。

内蒙古农业大学职业技术学院蛮力法5狱吏问题某国王对囚犯进行大赦,让一狱吏n次通过一排锁着的n间牢房,每通过一次,按所定规则转动n间牢房中的某些门锁,每转动一次,原来锁着的被打开,原来打开的被锁上;

通过n次后,门锁开着的,牢房中的犯人放出,否则犯人不得获释。

转动门锁的规则是这样的,第一次通过牢房,要转动每一把门锁,即把全部锁打开;

第二次通过牢房时,从第二间开始转动,每隔一间转动一次;

第k次通过牢房,从第k间开始转动,每隔k-1间转动一次;

问通过n次后,那些牢房的锁仍然是打开的?

内蒙古农业大学职业技术学院蛮力法算法设计1:

1)用n个空间的一维数组an,每个元素记录一个锁的状态,1为被锁上,0为被打开。

2)用数学运算方便模拟开关锁的技巧,对i号锁的一次开关锁可以转化为算术运算:

ai=1-ai。

3)第一次转动的是1,2,3,n号牢房;

第二次转动的是2,4,6,号牢房;

第三次转动的是3,6,9,号牢房;

第i次转动的是i,2i,3i,4i,号牢房,是起点为i,公差为i的等差数列。

4)不做其它的优化,用蛮力法通过循环模拟狱吏的开关锁过程,最后当第i号牢房对应的数组元素ai为0时,该牢房的囚犯得到大赦。

算法1如下:

内蒙古农业大学职业技术学院蛮力法main1()int*a,i,j,n;

input(n);

a=calloc(n+1,sizeof(int);

for(i=1;

i=n;

i+)ai=1;

i+)for(j=i;

j=n;

j=j+i)ai=1-ai;

i+)if(ai=0)print(i,”isfree.”);

算法分析:

以一次开关锁计算,算法的时间复杂度为n(1+1/2+1/3+1/n)=O(nlogn)。

内蒙古农业大学职业技术学院蛮力法问题分析:

转动门锁的规则可以有另一种理解,第一次转动的是编号为1的倍数的牢房;

第二次转动的是编号为2的倍数的牢房;

第三次转动的是编号为3的倍数的牢房;

则狱吏问题是一个关于因子个数的问题。

令d(n)为自然数n的因子个数,这里不计重复的因子,如4的因子为1,2,4共三个因子,而非1,2,2,4。

则d(n)有的为奇数,有的为偶数,见下表:

表4-3编号与因数个数的关系n12345678910111213141516d(n)1223242434262445数学模型1:

上表中的d(n)有的为奇数,有的为偶数,由于牢房的门开始是关着的,这样编号为i的牢房,所含1i之间的不重复因子个数为奇数时,牢房最后是打开的,反之,牢房最后是关闭的。

内蒙古农业大学职业技术学院蛮力法算法设计2:

1)算法应该是求出每个牢房编号的不重复的因子个数,当它为奇数时,这里边的囚犯得到大赦。

2)一个数的因子是没有规律的,只能从1n枚举尝试。

算法2如下:

main2()ints,i,j,n;

i+)s=1;

for(j=2;

j=i;

j=j+)if(imodj=0)s=s+1;

if(smod2=1)print(i,”isfree.”);

内蒙古农业大学职业技术学院蛮力法算法分析:

狱吏开关锁的主要操作是ai=1-ai;

共执行了n*(1+1/2+1/3+1/n)次,时间近似为复杂度为O(nlogn)。

使用了n个空间的一维数组。

算法2没有使用辅助空间,但由于求一个编号的因子个数也很复杂,其主要操作是判断imodj是否为0,共执行了n*(1+2+3+n)次,时间复杂度为O(n2)。

数学模型2:

仔细观察表4-3,发现当且仅当n为完全平方数时,d(n)为奇数;

这是因为n的因子是成对出现的,也即当n=a*b且ab时,必有两个因子a,b;

只有n为完全平方数,也即当n=a2时,才会出现d(n)为奇数的情形。

算法设计3:

这时只需要找出小于n的平方数即可。

算法3如下:

内蒙古农业大学职业技术学院蛮力法main3()ints,i,j,n;

i+)if(i*i=n)print(i,”isfree.”);

elsebreak;

由此算法我们应当注意:

在对运行效率要求较高的大规模的数据处理问题时,必须多动脑筋找出效率较高的数学模型及其对应的算法。

内蒙古农业大学职业技术学院蛮力法算法算法SelectionSort(A0.n-1)/该算法用选择排序对给定的数组排序/输入:

一个可排序数组A0.n-1/输出:

非降序排序的数组A0.n-1forfori0toton-2dodominIforforji+1toton-1dodoififAjminminjswapAiandAminA0A1Ai-1|Ai,Amin,An-1已经位于最终的位置上了最后的n-1个元素1选择排序选择排序选择排序和冒泡排序选择排序和冒泡排序内蒙古农业大学职业技术学院蛮力法|894568902934171717|456890292934891729|689045343489172934|904545688917293445|906868891729344568|908989172934456889|90内蒙古农业大学职业技术学院蛮力法22冒泡排序冒泡排序A0,AjAj+1,An-i-1|An-iAn-1?

已经位于最终的位置上了算法算法BubbleSort(A0.n-1)/该算法用冒泡排序对数组A0.n-1排序/输入:

非降序排列的数组A0.n-1fori0ton-2doforj0ton-2-idoifAj+1AjswapAjandAj+1内蒙古农业大学职业技术学院蛮力法89456890293417458968902934174568899029341745688929903417456889293490174568892934179045688929341790456829893417904568293489179045682934178990内蒙古农业大学职业技术学院蛮力法1顺序查找该算法只是简单地将给定列表中的连续元素和给定的查找键作比较,直到

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1