Young氏矩阵
一个m*n的Young氏矩阵是一个m*n的矩阵,其中每一行的数据都从左到右排序,每一列的数据都从上到下排序。Young氏矩阵中会有一些∞数据项,表示不存在的元素。Young氏矩阵可以存放m*n个有限的数。常见Young氏矩阵的相关操作包括:
1、向一个不满的Young氏矩阵中插入一个元素x,并保持Young氏矩阵的性质
2、根据一个数组,构建一个m*n的Young氏矩阵
3、移除Young氏矩阵中最小的元素,并保持Young氏矩阵的性质
4、判断Young氏矩阵为空或满
5、使用n*n的Young氏矩阵来对n^2个数进行排序,运行时间复杂度为O(n^3)
6、在O(m+n)的时间复杂度内,找出Young氏矩阵中等于x的所有坐标
package com.fangming.dataStructure.BiTree; public class YoungMatrix { public static void main(String[] args) { int[][] youngMatrix = createYoungMatrix(new int[] { 7, 2, 1, 4, 7, 8, 9, 0, 3, 2, 1, 3, 5, 7, 8, 9 }, 4, 4); //removeMin(youngMatrix,4,4,0, 0); //removeMin(youngMatrix); //print(youngMatrix); //sort(youngMatrix); findAllDataNoRecurtion(youngMatrix,7); } //非递归方式移除最小的值 public static void removeMin(int [][] youngMatrix){ youngMatrix[0][0] = Integer.MAX_VALUE; YoungMatrixityDown(youngMatrix,0,0); } //杨氏矩阵的排序输出 public static void sort(int [][] youngMatrix){ while(youngMatrix[0][0] != Integer.MAX_VALUE) { System.out.print(youngMatrix[0][0] + ","); removeMin(youngMatrix); } } public static void findData(int [][] youngMatrix,int x){ findData(youngMatrix,youngMatrix.length-1,0 ,x ); } public static void findDataNoRecurtion(int [][] youngMatrix,int x){ int i = youngMatrix.length-1; int j = 0; while(i >= 0 && j < youngMatrix[0].length ){ if (youngMatrix[i][j] == x){ System.out.println( "(" + i + "," + j + ")"); return; }else if (x < youngMatrix[i][j]){ i--; }else { j++; } } } public static void findAllDataNoRecurtion(int [][] youngMatrix,int x){ int i = youngMatrix.length-1; int j = 0; while(i >= 0 && j < youngMatrix[0].length ){ if (youngMatrix[i][j] == x){ System.out.println( "(" + i + "," + j + ")"); //往回找 for(int k = i-1 ; k >=0 ; --k ){ if (youngMatrix[k][j] == x){ System.out.println( "(" + k + "," + j + ")"); } } j++; }else if (x < youngMatrix[i][j]){ i--; }else { j++; } } } //找出杨氏矩阵中存在的元素x,并输出x,y坐标 public static void findData(int [][] youngMatrix,int m,int n ,int x){ if (m >= 0 && n <youngMatrix.length){ if (youngMatrix[m][n] == x){ System.out.println( "(" + m + "," + n + ")"); return; }else if (x < youngMatrix[m][n] ){ findData(youngMatrix,m-1,n,x); }else { findData(youngMatrix,m,n + 1,x); } } } // 递归方式移除最小的值 public static void removeMin(int[][] youngMatrix,int m,int n, int x, int y) { if (y + 1 < n && x+1 < m && youngMatrix[x][y + 1] < youngMatrix[x + 1][y]) { youngMatrix[x][y] = youngMatrix[x][y + 1]; removeMin(youngMatrix, m,n,x, y + 1); } else if (y + 1 < youngMatrix[0].length && x+1 < youngMatrix.length && youngMatrix[x][y + 1] >= youngMatrix[x + 1][y]) { youngMatrix[x][y] = youngMatrix[x + 1][y]; removeMin(youngMatrix,m,n, x + 1, y); } if (x + 1 >= m) { for (int j = y; j < n - 1; ++j) { if (youngMatrix[x][j] != Integer.MAX_VALUE) { youngMatrix[x][j] = youngMatrix[x][j + 1]; } } youngMatrix[x][n - 1] = Integer.MAX_VALUE; } if (y + 1 >= n ) { for (int j = x; j < m - 1; ++j) { if (youngMatrix[j][y] != Integer.MAX_VALUE) { youngMatrix[j][y] = youngMatrix[j + 1][y]; } } youngMatrix[m - 1][y] = Integer.MAX_VALUE; } } // 维持杨氏矩阵的性质 public static void YoungMatrixityDown(int[][] data, int x, int y) { int smallestX = x; int smallestY = y; // 横坐标 if (y + 1 < data[0].length && data[x][y + 1] < data[x][y]) { smallestY = y + 1; smallestX = x; } // 纵坐标 if (x + 1 < data.length && data[x + 1][y] < data[smallestX][smallestY]) { smallestX = x + 1; smallestY = y; } if (x != smallestX || y != smallestY) { int temp = data[x][y]; data[x][y] = data[smallestX][smallestY]; data[smallestX][smallestY] = temp; YoungMatrixityDown(data, smallestX, smallestY); } } // 维持杨氏矩阵的性质 public static void YoungMatrixityUp(int[][] data, int x, int y) { int smallestX = x; int smallestY = y; // 横坐标 if (y - 1 >= 0 && data[x][y - 1] > data[x][y]) { smallestY = y - 1; smallestX = x; } // 纵坐标 if (x - 1 >= 0 && data[x - 1][y] > data[smallestX][smallestY]) { smallestX = x - 1; smallestY = y; } if (x != smallestX || y != smallestY) { int temp = data[x][y]; data[x][y] = data[smallestX][smallestY]; data[smallestX][smallestY] = temp; YoungMatrixityUp(data, smallestX, smallestY); } } // 根据数组生成杨氏矩阵 public static int[][] createYoungMatrix(int[] data, int m, int n) { int[][] result = new int[m][n]; int length = data.length; assert length <= m * n; //init for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { result[i][j] = Integer.MAX_VALUE; } } for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (i * n + j < length) { result[i][j] = data[i * n + j]; } YoungMatrixityUp(result, i, j); } } print(result); return result; } private static void print(int[][] data) { int m = data.length; int n = data[0].length; for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { System.out.print(data[i][j]); System.out.print(" "); } System.out.println(""); } } }
相关推荐
ACM必会-杨氏矩阵题解分析.zip 是一个压缩文件,包含了关于杨氏矩阵问题的详细题解和代码实现。该资源旨在帮助参加ACM竞赛的选手更好地理解杨氏矩阵问题,并提供相应的解决方案和代码示例。 内容概要: 该压缩文件...
本文实例为大家分享了python实现杨氏矩阵查找的具体代码,供大家参考,具体内容如下 问题描述: 在一个m行n列二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数...
杨氏模量的定义为单位横截面上所受的力(应力)与单位长度上的伸长量(应变)之比值。实验中,当铁丝两端施加外力时,铁丝会发生形变,测量其伸长量和对应的应力,就可以计算出杨氏模量。 实验仪器包括三脚底座、...
杨氏矩阵查找是一种在二维矩阵中查找特定数值的算法,其特点是将数字按照螺旋状顺序存储在矩阵中。这种查找方法适用于对角线方向上的数值查找,尤其在矩阵较大时,能够提供一定的优化。在给出的JS代码中,实现了一个...
"动态法测量杨氏模量实验的数据处理" 在材料科学领域中,杨氏模量是一个重要的力学参数,用于描述固体材料的弹性性质。测量杨氏模量有多种方法,包括静态法、动态法和波传播法等,其中动态法适用于各种脆性材料的...
通过杨氏模量实验报告数据,我们可以掌握杨氏模量的测定方法和原理,并了解杨氏模量在材料科学中的应用。实验结果表明,杨氏模量是材料的重要物理量,对材料的机械性能有着重要的影响。 杨氏模量实验报告数据是大学...
CSDN海神之光上传的全部代码均可运行,亲测可用,尽我所能,为你服务; 1、代码压缩包内容 主函数:copper_wire_example.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若...
使用纤维和基体或给定的数据来定义复合层,然后铺设层压板。 使用经典层压理论计算每一层的应力和应变分布。 选择合适的失效标准来检查给定负载下层压板的强度。 显示准确的计算结果信息,显示应力应变分布图;显示...
通过上述实验原理和结果分析,我们可以了解到共振法在测量金属杨氏模量方面的具体应用,以及Matlab在实验数据处理中的重要作用。同时,这些知识点也为材料力学性质的研究提供了基础支持,对于现代工业经济和信息化中...
杨氏模量是评估材料力学性质的关键参数,在工程技术应用中占据重要地位。杨氏模量的测量方法多样,包括但不限于拉伸法、干涉条纹法和动态法等,这些方法通常结合了力学和光学的知识。随着科技的发展,测量精度越来越...
*【重要:请更改Fe_sigma值,以产生分布,默认是零】*在结构力学中,常常假定材料是均质的,单一域内使用相同材料属性来做相应的结构分析。然而,实际材料很难做到完全均质。在这个案例中,将考察对一个平板简单拉伸...
实验报告——用弯曲法测杨氏模量 实验目的: 1. 掌握长度测量的基本技巧,学习如何使用游标卡尺和千分尺等工具。 2. 熟悉霍尔位置传感器的工作原理和特性。 3. 利用弯曲法测量铁的杨氏模量。 4. 学习数据处理方法,...
大学物理实验杨氏模量的处理数据模板。。。。
在复合材料领域,刚度矩阵是理解材料性能和结构响应的关键。这个MATLAB程序提供了计算各向异性复合材料刚度矩阵的功能,对于学习和研究复合材料的初学者来说,这是一个非常实用的工具。各向异性是指材料的力学性能在...
Origin 在共振法测量固体材料的杨氏模量实验数据处理中的应用 在共振法测量固体材料的杨氏模量实验中,数据处理是非常重要的一步骤。Origin 软件的应用可以使数据处理变得更加简洁、高效和精确。本文将介绍 Origin ...
### 静态拉伸法测定金属丝杨氏模量实验的最佳条件与数据处理 #### 知识点一:静态拉伸法与杨氏模量测量原理 静态拉伸法是一种常用的物理实验方法,用于测定材料的杨氏模量(Young's modulus),即衡量材料在弹性...
杨氏弹性模量数据处理,处理杨氏弹性模量的工具,一个小程序
总结来说,这篇文章的核心知识点涉及空间四面体单元的应用、刚度矩阵的计算、向量化编程的实现方法,以及Matlab编程在结构分析中的应用。通过这些知识点,研究人员和工程师可以设计出更加高效的计算框架,对复杂的...
标题和描述中提到的知识点主要涉及声卡和Matlab软件在数据采集系统中的应用,特别是这种系统在物理实验中测量杨氏模量的应用。杨氏模量是材料力学性能的一个重要参数,它表征了材料抵抗形变的能力。为了详细阐述这些...