




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南京信息工程大学 算法设计与分析 实验(实习)报告实验(实习)名称 实验1 递归与分治策略 实验(实习)日期 2016.10 得分 指导老师 宣文霞 系 计算机 专业 网络工程 班级 2 姓名 刘信言 学号 20142346074 1. 实验目的1) Hanoi塔问题2) Strassen矩阵乘法3) 合并排序(Merge Sort)4) 快速排序(Quick Sort)2. 实验内容及分析设计过程:1)Hanoi塔问题import java.util.Scanner;public class Hanoi public static void hanoi(int number,char A,char B,char C) if(number=1) System.out.println(A+-+C); return; hanoi(number-1,A,C,B); hanoi(1,A,B,C); hanoi(number-1,B,A,C); public static void main(String args) Scanner input =new Scanner(System.in); int n= input.nextInt(); hanoi(n,A,B,C); 2)Strassen矩阵乘法import java.util.*;public class Strassenpublic Strassen()A = new intNUMBERNUMBER;B = new intNUMBERNUMBER;C = new intNUMBERNUMBER;public void input(int a)Scanner scanner = new Scanner(System.in);for(int i = 0; i a.length; i+) for(int j = 0; j ai.length; j+) aij = scanner.nextInt();public void output(int resault)for(int b : resault) for(int temp : b) System.out.print(temp + );System.out.println();public void Mul(int first, int second, int resault)for(int i = 0; i 2; +i) for(int j = 0; j 2; +j) resaultij = 0;for(int k = 0; k 2; +k) resaultij += firstik * secondkj;public void Add(int first, int second, int resault)for(int i = 0; i first.length; i+) for(int j = 0; j firsti.length; j+) resaultij = firstij + secondij;public void sub(int first, int second, int resault)for(int i = 0; i first.length; i+) for(int j = 0; j firsti.length; j+) resaultij = firstij - secondij;public void strassen(int A, int B, int C)/定义一些中间变量int M1=new int NUMBERNUMBER;int M2=new int NUMBERNUMBER;int M3=new int NUMBERNUMBER;int M4=new int NUMBERNUMBER;int M5=new int NUMBERNUMBER;int M6=new int NUMBERNUMBER;int M7=new int NUMBERNUMBER;int C11=new int NUMBERNUMBER;int C12=new int NUMBERNUMBER;int C21=new int NUMBERNUMBER;int C22=new int NUMBERNUMBER;int A11=new int NUMBERNUMBER;int A12=new int NUMBERNUMBER;int A21=new int NUMBERNUMBER;int A22=new int NUMBERNUMBER;int B11=new int NUMBERNUMBER;int B12=new int NUMBERNUMBER;int B21=new int NUMBERNUMBER;int B22=new int NUMBERNUMBER;int temp=new int NUMBERNUMBER;int temp1=new int NUMBERNUMBER;if(A.length=2)Mul(A, B, C);else/首先将矩阵A,B 分为4块for(int i = 0; i A.length/2; i+) for(int j = 0; j A.length/2; j+) A11ij=Aij;A12ij=Aij+A.length/2;A21ij=Ai+A.length/2j;A22ij=Ai+A.length/2j+A.length/2;B11ij=Bij;B12ij=Bij+A.length/2;B21ij=Bi+A.length/2j;B22ij=Bi+A.length/2j+A.length/2;/计算M1sub(B12, B22, temp);Mul(A11, temp, M1);/计算M2Add(A11, A12, temp);Mul(temp, B22, M2);/计算M3Add(A21, A22, temp);Mul(temp, B11, M3);/M4sub(B21, B11, temp);Mul(A22, temp, M4);/M5Add(A11, A22, temp1);Add(B11, B22, temp);Mul(temp1, temp, M5);/M6sub(A12, A22, temp1);Add(B21, B22, temp);Mul(temp1, temp, M6);/M7sub(A11, A21, temp1);Add(B11, B12, temp);Mul(temp1, temp, M7);/计算C11Add(M5, M4, temp1);sub(temp1, M2, temp);Add(temp, M6, C11);/计算C12Add(M1, M2, C12);/C21Add(M3, M4, C21);/C22Add(M5, M1, temp1);sub(temp1, M3, temp);sub(temp, M7, C22);/结果送回C中for(int i = 0; i C.length/2; i+) for(int j = 0; j C.length/2; j+) Cij=C11ij;Cij+C.length/2=C12ij;Ci+C.length/2j=C21ij;Ci+C.length/2j+C.length/2=C22ij;public static void main(String args)Strassen demo=new Strassen();System.out.println(输入矩阵A);demo.input(A);System.out.println(输入矩阵B);demo.input(B);demo.strassen(A, B, C);demo.output(C);private static int A;private static int B;private static int C;private final static int NUMBER = 4;3)合并排序(Merge Sort)public class MergeSort2 public static void merge(int a, int p, int q, int r)int l1 = q-p+1;int l2 = r-q;int array1 = new intl1 + 1;int array2 = new intl2 + 1;for(int i = 0; il1; i+)array1i = ap+i;for(int i = 0; il2; i+)array2i= aq+1+i; array1l1 = Integer.MAX_VALUE;array2l2 = Integer.MAX_VALUE;int i = 0;int j = 0;for(int k = p; k=r; k+)if(array1i = array2j )ap+= array1i;i+;elseap+= array2j;j+;public static void mergeSort(int a, int low, int high)if(low = high)return;elseint poi = (low + high)/2;mergeSort(a, low, poi);mergeSort(a, poi + 1, high);merge(a, low, poi, high);public static void main(String args) int array = 1,3,6,4,6,4,8,3,8,3,0;mergeSort(array, 0, array.length - 1);for(int i = 0; iarray.length; i+)System.out.print(arrayi + );4)快速排序(Quick Sort)public class QuickSort public static int partition(inta, int p, int q)int key = aq;int i = p-1;for(int j = p; j=q - 1; j+)if(aj = key)i = i + 1;int temp = ai;ai= aj;aj= temp; aq = ai+1;/这句话漏掉了ai+1 = key;return i+1;public static void quickSort(int a, int p, int q)if(pq)int poi = partition(a, p, q);quickSort(a, p, poi -1 );quickSort(a, poi + 1, q);public static void main(String args) int a= 3,5,2,4,6,1,9,8,7,4;quickSort(a, 0, a.length - 1);for(int i = 0; ia.length; i+)System.out.pri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 邮储银行2025白银市秋招笔试英语题专练及答案
- 建设银行2025咸宁市秋招面试典型题目及参考答案
- 中国银行2025广州市秋招笔试性格测试题专练及答案
- 2025年3D打印技术的材料创新研究
- 交通银行2025淮安市信息科技岗笔试题及答案
- 2025私有云市场分析
- 农业银行2025河源市小语种岗笔试题及答案
- 交通银行2025内江市秋招笔试EPI能力测试题专练及答案
- 建设银行2025结构化面试15问及话术山西地区
- 农业银行2025三明市信息科技岗笔试题及答案
- TJPMA 022-2024 疾病预防控制业务档案管理规范
- 餐饮服务与数字化运营 习题及答案 项目七
- 《神经外科颅内压增高》教学课件
- 铁路劳动安全 课件 第五章 安全标志标识
- 教师严慈相济课件
- 肛肠科个案护理
- 果园机器人课件
- 数智时代高校微专业的内涵特征、建设机制与推进路径
- 4第四节决策树与集成算法
- 汽车零部件质量培训
- 眼科学检查课件
评论
0/150
提交评论