矩阵

信息学 踩方格

痞子三分冷 提交于 2020-02-02 14:35:38
【题目描述】 有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设: a、每走一步时,只能从当前方格移动一格,走到某个相邻的方格上; b、走过的格子立即塌陷无法再走第二次; c、只能向北、东、西三个方向走; 请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。 【输入】 允许在方格上行走的步数n(n≤20)。 【输出】 计算出的方案数量。 # include <iostream> using namespace std ; int main ( ) { int n , a [ 30 ] ; cin >> n a [ 1 ] = 3 ; a [ 2 ] = 7 ; for ( int i = 3 ; i <= n ; i ++ ) a [ i ] = a [ i - 2 ] + 2 * a [ i - 1 ] ; cout << a [ n ] << endl ; return 0 ; } 来源: CSDN 作者: Bubles_tang 链接: https://blog.csdn.net/qq_45897987/article/details/104143903

剑指offer 二维数组中的查找

有些话、适合烂在心里 提交于 2020-02-02 08:56:43
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 题目分析 分析1 看到这个题目,我们首先的反应是折半查找,因为这是一个有序数组,那么可以在每一个分量上面进行折半查找,那么这样的时间复杂度为O(nlogn). 分析2 在上面的分析上面,显然我们只使用了y方向或者x方向的顺序性,而未使用另一个方向的顺序性,那么,我们该如何使用另一个方向的顺序性呢?下面进行分析。 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 比如说我们要查找数字7,观察上述矩阵。我们确定查找起点与查找方向 我们使用右上角为起点,方向如下规定: 如果 当前数字等于目标值,那么返回true 如果 当前数字大于目标值,那么当前数字所在列以下数字全部大于目标值,那么继续向左查找 如果 当前数字小于目标值,目标值可能出现在这一列,那么向下查找 如果超出边界,返回flase java代码 public boolean Find ( int target , int [ ] [ ] array ) { boolean flag = false ; int loc_x = 0 ; int loc_y = array [ 0 ] . length - 1

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

五迷三道 提交于 2020-02-02 03:21:27
O(n)的算法 利用二维数组由上到下,由左到右递增的规律, 那么选取右上角或者左下角的元素a[row][col]与target进行比较, 当target小于元素a[row][col]时,那么target必定在元素a所在行的左边, 即col–; 当target大于元素a[row][col]时,那么target必定在元素a所在列的下边, 即row++; 假设是一个n n的矩阵,因为每个一维数组的长度相同。故最坏情况是查找的元素在左下角,运行时间T(n)= 2 n=O(n) public static bool Find(int target, int[][] array) { int row = 0; int col = array[0].Length - 1; while (row <= array.Length - 1 && col >= 0) { if (target == array[row][col]) return true; else if (target > array[row][col]) row++; else col--; } return false; } 我们考虑每个一维数组不是等长的情况。这种情况会有限制 例如: int[][] array = new int[3][]; array[0] =new int[]{ 1,2,3,5}; array[1]=new

ZZULIOJ 1126: 布尔矩阵的奇偶性

扶醉桌前 提交于 2020-02-02 00:46:03
题目描述 一个布尔方阵具有奇偶均势特性,当且仅当 每行、每列总和为偶数,即包含偶数个1。如下面这个4*4的矩阵就具有奇偶均势特性: 1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 编写程序,读入一个n阶方阵并检查它是否具有奇偶均势特性。如果没有,你的程序应当再检查一下它是否可以通过修改一位(把0改为1,把1改为0)来使它具有奇偶均势特性;如果不可能,这个矩阵就被认为是破坏了。 输入 第一行是一个整数n ( 0< n < 100 ),代表该方阵的阶数。然后输入n 行,每行n个整数(0或1)。 输出 如果矩阵是布尔矩阵,输出“OK”;如果能通过只修改该矩阵中的一位来使它成为布尔矩阵,则输出“Change bit(i,j)”,这里i和j是被修改的元素的行与列(行,列号从0开始);否则,输出“Corrupt”。 样例输入 4 1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 样例输出 OK #include<stdio.h> #define N 100 int a[100][100]; int main(){ int n,i,j,s,count=0,b=-1,c=-1; //b记录需要改变的行,c记录需要改变的列 scanf("%d",&n); for(i=0;i<n;i++){ for(j=0;j<n;j++){ scanf("%d",&a[i][j]);

numpy基础--线性代数

僤鯓⒐⒋嵵緔 提交于 2020-02-01 17:49:42
以下代码的前提: import numpy as np 线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分。numpy提供了一个用于矩阵乘法的dot函数(既是一个数组方法也是numpy命名空间中的一个函数)。 1 >>> x = np.array([[1, 2, 3], [4, 5, 6]]) 2 >>> y = np.array([[1, 2], [3, 4], [5, 6]]) 3 >>> x 4 array([[1, 2, 3], 5 [4, 5, 6]]) 6 >>> y 7 array([[1, 2], 8 [3, 4], 9 [5, 6]]) 10 >>> np.dot(x, y) 11 array([[22, 28], 12 [49, 64]]) 13 >>> x.dot(y) 14 array([[22, 28], 15 [49, 64]]) 16 >>> numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西。 1 >>> from numpy.linalg import inv, qr 2 >>> X = np.arange(9).reshape(3, 3) 3 >>> X 4 array([[0, 1, 2], 5 [3, 4, 5], 6 [6, 7, 8]]) 7 >>> mat = X.T

AcWing 798.差分矩阵

三世轮回 提交于 2020-02-01 16:21:19
AcWing 798.差分矩阵 题目描述 输入一个n行m列的整数矩阵,再输入q个操作,每个操作包含五个整数x1, y1, x2, y2, c,其中(x1, y1)和(x2, y2)表示一个子矩阵的左上角坐标和右下角坐标。 每个操作都要将选中的子矩阵中的每个元素的值加上c。 请你将进行完所有操作后的矩阵输出。 输入格式 第一行包含整数n,m,q。 接下来n行,每行包含m个整数,表示整数矩阵。 接下来q行,每行包含5个整数x1, y1, x2, y2, c,表示一个操作。 输出格式 共 n 行,每行 m 个整数,表示所有操作进行完毕后的最终矩阵。 数据范围 1≤n,m≤1000, 1≤q≤100000, 1≤x1≤x2≤n, 1≤y1≤y2≤m, −1000≤c≤1000, −1000≤矩阵内元素的值≤1000 输入样例 3 4 3 1 2 2 1 3 2 2 1 1 1 1 1 1 1 2 2 1 1 3 2 3 2 3 1 3 4 1 输出样例 2 3 4 1 4 3 4 1 2 2 2 2 题目思路 用差分思想解决,每次都对差分数组进行操作,降低复杂度 每一个a坐标都是b矩阵中上方与左方所形成的矩阵之和, 每次都对b矩阵进行操作 #include<iostream> using namespace std; const int N = 1e3+10; int a[N][N],b

线性回归

六月ゝ 毕业季﹏ 提交于 2020-02-01 16:20:41
线性回归模型的数学表达式如公示1所示: θ \theta θ 统称为模型的参数,其中 θ 0 \theta_0 θ 0 ​ 被称为截距(intercept), θ 1 \theta_1 θ 1 ​ ~ θ n \theta_n θ n ​ 被称为系数(coefficient), x i x_{i} x i ​ 表示数据属性的第i个自变量。我们通过矩阵形式来表示这个方程,如公式2所示: 这里 x x x 和 θ \theta θ 都可以被看成一个矩阵,线性回归的任务就是通过预测函数 z z z 来映射输入的特征矩阵 x x x 和标签 y y y 的线性关系,而构造预测函数的核心就是找出模型的参数: θ T \theta_T θ T ​ 和 θ 0 \theta_0 θ 0 ​ ,这里是通过著名的最小二乘法来求解的。 来源: CSDN 作者: 阴天了 链接: https://blog.csdn.net/sun_xiao_kai/article/details/103937479

C++杨辉三角(初学)

爱⌒轻易说出口 提交于 2020-02-01 14:37:28
写在前面 第一次详细的写点东西,如有不对,请多多指教。 01 C++的 杨辉三角之 第一个版本–就是最基础的,输入行数,输出打印的图形。话不多说,代码如下: # include <iostream> using namespace std ; int main ( ) { int num ; //代表着要打印的行数 cin >> num ; //输入行数 int a [ num ] [ num ] ; //定义一个二维数组,但是打印的时候只打印一部分,不是打印全部 int i , j ; //i代表行,j代表列 for ( i = 0 ; i < num ; i ++ ) { for ( j = 0 ; j <= i ; j ++ ) { if ( j == 0 || i == j ) a [ i ] [ j ] = 1 ; //如果是第一列或者是每一行中行数与列数相等的那一列 else { a [ i ] [ j ] = a [ i - 1 ] [ j - 1 ] + a [ i - 1 ] [ j ] ; //该行列的数字为上上一行的左下方和右下方的数字之和 } cout << a [ i ] [ j ] << " " ; //在每一个输出之间加空格 } cout << endl ; //在每一行之后输出一个换行符, //所以是在第一个for循环外,第二个for循环内输出换行符

matlab学习记录

↘锁芯ラ 提交于 2020-02-01 12:26:11
在毕业实习项目高光谱图像解混中,需要使用Matlab语言来编写解混算法。我在之前的学习过程中也尚未接触过Matlab平台的开发,算是一个入门新手。借此机会也对学习过程遇到的知识点稍作记录。 正文 一、冒号的用法 1、表示该维度上的所有元素 对于矩阵来说,冒号表示该维度上的所有元素。 例如: 矩阵A = $$ left[ begin{matrix} 1 & 2 & 3 4 & 5 & 6 7 & 8 & 9 end{matrix} right] $$ A(1, :1)表示矩阵A的第一行。 则 A(1, :1) = ( https://leanote.com/api/file/getImage?fileId=583c3a08ab644137810193e9 ) $$ left[ begin{matrix} 1 & 2 & 3 end{matrix} right] $$ 大专栏 matlab学习记录 阵定义" class="headerlink" title="2、进行矩阵定义">2、进行矩阵定义 Matlab定义矩阵的一种方法是: A = s:d:f 其中: s:表示起始值; d:表示增量; f:表示终点 若矩阵A = $$ left[ begin{matrix} 1 & 2 & 3 & 4 & 5 4 & 5 & 6 & 7 & 8 0 & 1 & 4 & 7 & 8 0 & 2 &