算法设计之一些算法的实现
来源:互联网 发布:java 收银管理系统 编辑:程序博客网 时间:2024/05/16 14:10
算法设计
第一次作算法设计的作业,感觉还是有点难度的.虽然以前上<<数据结构>>的时候也写过不少的复杂算法,但都是于课本为中心改来改去的.所以没觉得有什么.但自己写算法感觉还不算,特有成就感,(虽然写得不是很好).虽然方法与步骤不是很科学,但我觉得随着课程的深入学习,这方面会有所提高于规范化的.
最有体会的是数据结构与算法的那种密切联系的关系,还有是有用"栈"的思想来实现原本用递归来实现的算法,所得到的效果与好处,有时真是说不出good.大家就看看我所写的作业吧(一些实现的代码),代码所关的问题,大家可以去找算法的书,应该容易找到想关的主题的.希望大家多多指教呀!
/*本程序利用霍纳规则计算型如:*//*p(x)=AnX*/#include<iostream.h>/*函数1(非递归算法)*/double heNaFunction_1(double Array[], double x, int n);/*函数2(递归算法)*/double heNaFunction_2(double Array[], double x, int n, int tag);/*函数3('栈'算法)*/double heNaFunction_3(double Array[], double x, int n);/*主函数*/void main(){/*定义测试变量*/double Array_a[6] = {1,2,3,4,5,6};/*用于存放多项式的各个系数*/double b = heNaFunction_1(Array_a, 2.0, 5);/*算多项式的值*/double c = heNaFunction_2(Array_a, 2.0, 5, 1);/*算多项式的值*/double d = heNaFunction_3(Array_a, 2.0,5);/*算多项式的值*/cout<<"***********"<<endl;cout<<b<<endl;/*输出结果*/cout<<c<<endl;/*输出结果*/cout<<d<<endl;/*输出结果*/cout<<"###########"<<endl;}/*-------------------------------------------------------------*//*函数的功能:利用霍纳规则计算多项式的值(非递归算法)*//*函数返回值:多项式的计算结果(浮点数)*//*函数参数 第一个:多项式按降幂顺序的对应系数(浮点型数组)*//* 第二个:多项式x当前的数值(浮点数)*//* 第三个:多项式的最高次幂/*-------------------------------------------------------------*/double heNaFunction_1(double a[], double x, int n){double sum = 0;/*存放多项式的总和*/sum = a[0]*x + a[1];/*先计算利用霍纳规则化简后的最内式的值*/for(int i=2; i<=n; i++)/*循环从内到外的计算总和(从霍纳表达式*/{ /*一层一层的算出总和)*/sum = sum*x +a[i];}return sum;/*返回多项式的和*/}/*-------------------------------------------------------------*//*函数的功能:利用霍纳规则计算多项式的值(递归算法)*//*函数返回值:多项式的计算结果(浮点数)*//*函数参数 第一个:多项式按降幂顺序的对应系数(浮点型数组)*//* 第二个:多项式x当前的数值(浮点数)*//* 第三个:多项式的最高次幂*//* 第四个:递归的系数(赋值为1)(整型数)*//*-------------------------------------------------------------*/double heNaFunction_2(double Array[], double x, int n, int tag){if(tag==n)/*当递归次数到时停止(递归次数为多项系的最高次幂)*/{cout<<"last"<<endl;/*方便查看递归过程*/return (Array[0]*x + Array[1]);}else{cout<<"mill"<<endl;/*方便查看递归过程*/return (heNaFunction_2(Array, x, n, tag+1)*x + Array[n-tag+1]);/*递归调用------------------递归次数加1----上一层的系数*/}}/*-------------------------------------------------------------*//*函数的功能:利用霍纳规则计算多项式的值(递归算法)*//*函数返回值:多项式的计算结果(浮点数)*//*函数参数 第一个:多项式按降幂顺序的对应系数(浮点型数组)*//* 第二个:多项式x当前的数值(浮点数)*//* 第三个:多项式的单项式个数*//*/*-------------------------------------------------------------*/double heNaFunction_3(double Array[], double x, int n){double temp = 0;for(int i=0;i<=n;i++){temp = temp*x + Array[i];}return temp;}/*本程序演示AckermannFunction函数的计算过程*/#include<iostream.h>/*函数声名*/int AckermannFunction(int m, int n);void main(){int a = 0;a = AckermannFunction(2, 3);cout<<"AckermannFunction(2, 3)="<<a<<endl;}/*-------------------------------------------------------------*//*函数的功能:计算Ackermann函数的值(递归算法)*//*函数返回值:Ackermann函数的值(整型)*//*函数参数 第一个:Ackermann函数的第一个参数(整型)*//* 第二个:Ackermann函数的第二个参数(整型)*//*-------------------------------------------------------------*/int AckermannFunction(int m, int n){if(m==0)/*递归结束的条件*/{cout<<n+1<<endl;/*方便查看过程*/return (n+1);}else if(n==0)/*递归调用*/{ /*方便查看过程*/cout<<"AckermannFunction("<<m-1<<","<<1<<")"<<endl;return AckermannFunction(m - 1,1);}else/*递归调用*/{ /*方便查看过程*/cout<<"AckermannFunction("<<m-1<<","<<"AckermannFunction("<<m<<","<<n-1<<") )"<<endl;return AckermannFunction(m -1, AckermannFunction(m, n -1));}}/*本程序用堆栈思想实现AckermannFunction函数功能*//*编者:Lgw*//*专业:04计本二*//*日期:07/3/13*/#include<iostream.h>/*函数声名*/int AckermannFunction(int m, int n);/*主函数*/void main(){int a =AckermannFunction(2,3);/*调试数据*/cout<<"AckermannFunction(2,3)="<<a<<endl;/*打印过程*/}/*-------------------------------------------------------------*//*函数的功能:计算AckermannFunction函数*//*函数返回值:函数的值(整型数)*//*函数参数 第一个:函数的 m(整型数)*//*函数参数 第二个:函数的 n(整型数)*//*-------------------------------------------------------------*/int AckermannFunction(int m, int n){int a[100] ;/*数组"栈"++++看情况可以加大数组元素*/a[0]=m;/*初使化*/a[1]=n;/*初使化*/int i=1;/*栈指针*/while(i!=0){if(a[i-1]==0)/*第一种情况*/{ /*A(m,n)=n+1 当m=0*/a[i-1]=a[i]+1;i--;/*出栈*/}else if(a[i]==0)/*第二种情况*/{ /*A(m,n)=A(m-1,1)*/a[i]=1;a[i-1]=a[i-1]-1;}else{int temp=a[i];/*第三种情况 A(m, n)=A(m-1,A(m,n-1))*/a[i]=a[i-1];a[i-1]=a[i-1]-1;i++;a[i]=temp-1;}for(int k=0;k<=i;k++)/*输出运算过程*/cout<<a[k]<<" ";cout<<endl;}return a[0];}程序运行结果如同作业本上的运算过程~/*本程序用于演示鸽巢原理*/#include<iostream.h>/*函数声名*/double function(double x);void geChaoFunction(double Array[], int n);/*主函数*/void main(){double Array_a[15];for(int i=0; i<15; i++)Array_a[i]=i;geChaoFunction(Array_a, 15);}/*-------------------------------------------------------------*//*函数的功能:计算自定义的满足鸽巢原理的函数的值*//*函数返回值:函数的值(浮点数)*//*函数参数 第一个:函数的变量(浮点数)*//*-------------------------------------------------------------*/double function(double x){return (x-6)*(x-6);/*函数表达式y=(x-6)*(x-6)*/}/*-------------------------------------------------------------*//*函数的功能:演示过程与结果*//*函数返回值:无*//*函数参数 第一个:变量数组(浮点型数组)*//* 第二个:变量个数(整型)*//*-------------------------------------------------------------*/void geChaoFunction(double Array[], int n){for(int i=0; i<n; i++){ for(int j=0; j<n; j++){ /*如果a!=b且f(a)==f(b)就输出*/if((function(Array[i])==function(Array[j]))&&(i!=j))cout<<"f("<<Array[i]<<")=="<<"f("<<Array[j]<<")"<<endl;}}}#include<iostream.h>#define MaxSize_1 20#define MaxSize_2 50struct CharStruct/*用于存放子集*/{char A[MaxSize_1+1];int p;/*用于记录子集中有多少个字符*/};class PowSet/*用来指挥计算的类*/{public:CharStruct Set[MaxSize_2+1];int Set_number;/*记录有多少个子集*/public:PowSet(char a)/*构造函数*/{Set_number = 2;Set[1].A[1]= a;Set[2].A[1]= ' ';Set[1].p = 1;Set[2].p = 1;}void SetPlay()/*打印函数*/{for(int i=1;i<=Set_number;i++){cout<<"(";for(int k=1;k<=Set[i].p;k++){cout<<Set[i].A[k]<<" ";}cout<<")"<<endl;}}void SetCopyItSelf()/*自身的复印函数*/{int j=1;for(int i=Set_number+1;i<=2*Set_number;i++){for(int k=1;k<=Set[j].p;k++){Set[i].A[k]=Set[j].A[k];}Set[i].p=Set[j].p;j++;}Set_number = 2*Set_number;}void AddNumber(char a)/*一个子集中加入一个符的函数*/{for(int i=1; i<=Set_number/2;i++){Set[i].A[Set[i].p+1]=a;Set[i].p=Set[i].p+1;}}};/*-------------------------------------------------------------*//*函数的功能:计算一个集合的子集*//*函数返回值:无*//*函数参数 第一个:变量数组(整型数组)*//* 第二个:集合元数个数(整型)*//*-------------------------------------------------------------*/void PowSetFunction(char a[], int n)/*计算过程的函数*/{PowSet myset(a[0]);for(int i=1;i<=n-1;i++){myset.SetCopyItSelf();myset.AddNumber(a[i]);}myset.SetPlay();cout<<"以上为(";for(int j=0;j<n;j++)cout<<a[j]<<" ";cout<<")"<<"的子集"<<endl;cout<<"一共有"<<myset.Set_number<<"个"<<endl;}void main(){char Char_Array[5]={'A','B','C','D','E'};/调试用的数据**/PowSetFunction(Char_Array, 5);}
- 算法设计之一些算法的实现
- 一些算法题的实现
- 一些递归算法的实现
- 一些经典的算法实现
- 算法设计之快速排序的实现 (C++实现)
- 【算法】一些算法设计方法
- 算法分析与设计的一些题目
- java实现算法设计之导弹拦截
- java实现算法设计之走楼梯
- 一些常用算法实现
- 一些简单算法实现
- 一些算法JAVA实现
- 实现搜索算法的一些感想~~
- 动态字符串结构的一些算法实现
- 一个东大学生实现的一些算法
- 一些简单数据结构算法的实现1
- 一些简单数据结构算法的实现2
- 一些简单数据结构算法的实现3
- AJAX并不神秘
- Puyo-Puyo设计文档
- Javascript事件
- html技巧
- ASP.NET 2.0打造购物车和支付系统之 一
- 算法设计之一些算法的实现
- asp.net 实现购物车
- 计算视频文件(包含PCR)播放带宽的方法
- 反射
- 数据导入导出工具BCP详解
- 防止网站内容被人小偷和采集的ASP代码
- JSP三种页面跳转方式的比较
- 博客的开篇
- JSP:用连接池提高Servlet访问数据库的效率