1、1算法设计与分析实验报告一学 号: 姓 名: 日 期: 2012.11.5 得 分: 一、实验内容:分别用蛮力法、分治法、减治法实现 an。二、实验要求:完成试验报告、给出对此结果。为防止大数溢出,可以用 1n来测试在 n比较大是的三种算法运行情况。四、源程序及注释:#include #include using namespace std;/蛮力法求 a的 n次方int Power1(int a,int n) int as=1;for(int i=0;in;i+)ans*=a;return ans;/分治法求 a的 n次方int Power2(int a,int n) int ans=1;i
2、f (n=0) ans=1;else if(n=1) ans=a;elseans=Power2(a,n/2)*Power2(a,(n+1)/2);return ans;/减治法求 a的 n次方int Power3(int a,int n) int ans=1;if (n=0) ans=1;else if(n=1) ans=a;else ans=Power3(a,n/2);if(n%2=0)ans=ans*ans;/当 n为偶数return ans;2int main()int a=1;int n=10000;LARGE_INTEGER start1,end1,start2,end2,start
3、3,end3,f;QueryPerformanceFrequency(QueryPerformanceCounter(int p1=Power1(a,n);QueryPerformanceCounter(QueryPerformanceCounter(int p2=Power2(a,n);QueryPerformanceCounter(QueryPerformanceCounter(int p3=Power3(a,n);QueryPerformanceCounter(cout“a=“a“,n=“nendl;cout“蛮力法求 a的 n次方运行时间(单位:s)及结果“endldouble(end
4、1.QuadPart-start1.QuadPart)/f.QuadPart“ “p1endl;cout“分治法求 a的 n次方运行时间(单位:s)及结果“endldouble(end2.QuadPart-start2.QuadPart)/f.QuadPart“ “p2endl;cout“减治法求 a的 n次方运行时间(单位:s)及结果“endldouble(end3.QuadPart-start3.QuadPart)/f.QuadPart“ “p3endl;return 0;五、运行输出结果:六、调试和运行程序过程中产生的问题、采取的措施及获得的相关经验教训:合适的代码是实验能够成功进行的关键,当然前提是对问题的深刻理解,从实验结果我们不难看出,应用减治法处理问题的效率还是很高的。