矩阵

正方形最大面积

こ雲淡風輕ζ 提交于 2020-02-06 08:56:05
题目如下: Given a 2D binary matrix filled with 0’s and 1’s, find the largest square containing only 1’s and return its area. Example: Input: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 Output: 4 就是给定一个二维数组 求出他的最大一个正方形的面积 (正方形是由1构成的图形,必须要连续,外加是正方形) 一开始尝试DFS解决(可行) 但是 顶不住 写不出来 后面采用了一个时间复杂度较高但是好理解的算法 先求出正方形最大可能的边长 :int r = matrix.length; 二维数组的行数 int c = matrix[0].length; 二维数组的列数 int len = Math.min(r, c); 最大值是这两个的较小值(因为是正方形) 然后从1开始逐步增加边长的值 判断是否构成的是正方形 判断是否正方形代码如下: int r = matrix.length; int c = matrix[0].length; int len = Math.min(r, c); 总代吗如下:(看代码⑧ 解释太麻烦) public static int maximalSquare(char[][] matrix) {

【校内模拟】矩阵求和(组合数转下降幂转自然幂)(斯特林数)(树状数组)

给你一囗甜甜゛ 提交于 2020-02-06 05:12:44
简要题意: 一个 n × m n\times m n × m 矩阵,第 i i i 行第 j j j 列的权值为 ( i − 1 ) ⋅ m + j (i-1)\cdot m + j ( i − 1 ) ⋅ m + j ,需要你支持一下三种操作: R,交换两行 C,交换两列 Q,询问对一个子矩阵求 k k k 次二维前缀和后矩阵中元素之和。 数据范围 n , m , Q ≤ 1 e 5 , k ≤ 10 n,m,Q\leq 1e5,k\leq 10 n , m , Q ≤ 1 e 5 , k ≤ 1 0 题解: 容易发现一个点的权值只和行号和列号有关,容易想到行列分开维护。 询问的子矩形用 ( l x , l y ) − ( r x , r y ) (lx,ly)-(rx,ry) ( l x , l y ) − ( r x , r y ) 表示。 朴素一点考虑求出来的前缀和,考虑每个位置被求了多少次,可以表示为: A n s = ∑ i = l x r x ∑ j = l y r y ( k + r x − i k ) ( k + r y − j k ) ( a i + b j ) Ans=\sum_{i=lx}^{rx}\sum_{j=ly}^{ry}{k+rx-i\choose k}{k+ry-j\choose k}(a_i+b_j) A n s = i = l x ∑ r x

《剑指Offer》矩阵中的路径(Java 实现)

蹲街弑〆低调 提交于 2020-02-06 04:45:55
文章目录 一、题目 1.1 题目描述 1.2 题目链接 二、实现代码 一、题目 1.1 题目描述   请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。 1.2 题目链接 《牛客网》:矩阵中的路径 二、实现代码 public class Solution { private final static int [ ] [ ] next = { { 0 , - 1 } , { 0 , 1 } , { - 1 , 0 } , { 1 , 0 } } ; private int rows ; private int cols ; public boolean hasPath ( char [ ] array , int rows , int cols , char [ ] str ) { if ( rows == 0 || cols == 0 ) return false ; this . rows

vector二维数组用法

若如初见. 提交于 2020-02-06 03:11:20
Title 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 Code # include <iostream> # include <vector> # include <string.h> using namespace std ; int main ( ) { int n ; while ( cin >> n ) { int flag , i , j ; cin >> flag ; string name ; int score ; vector < vector < string > > students ( 101 , vector < string > ( ) ) ; for ( int i = 0 ; i < n ; i ++ ) { cin >> name >> score ; students [ score ] . push_back ( name ) ; //已按score排好序 } if ( flag ) { for ( i = 0 ; i < students . size ( ) ; i ++ ) { for ( j = 0 ; j < students [ i ] . size ( ) ; j ++ ) cout << students [ i ] [ j ] << " " << i <<

广度优先搜索遍历之数块数(算法笔记学习)

左心房为你撑大大i 提交于 2020-02-06 02:24:24
/*给出一个m*n的矩阵,矩阵中的元素或为0,或为1.称位置(x,y)与其上下左右四个位置(x,y+1);(x,y-1)(x+1,y)(x-1,y)是相邻的。如果矩阵 中有若干各个1是相邻的(不必两两相连),那么称这些1构成了一个块。求给定的矩阵中块的个数。 0 1 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 1 1 1 1 0 0 0 例如上个6*7矩阵中的“块”的个数为4;*/ # include <stdio.h> # include <queue> using namespace std ; const int maxn = 100 ; struct node { int x , y ; } Node ; int m , n ; int matrix [ maxn ] [ maxn ] ; bool inq [ maxn ] [ maxn ] = { false } ; int X [ 4 ] = { 0 , 0 , 1 , - 1 } ; int Y [ 4 ] = { 1 , - 1 , 0 , 0 } ; bool judge ( int x , int y ) { if ( x >= n || x < 0 || y >= m || y < 0 ) return false ;

NMF人脸数据特征提取

点点圈 提交于 2020-02-06 01:22:43
非负矩阵分解(NMF) 非负矩阵分解是在矩阵中所有元素均为非负数约束条件之下的矩阵分解方法。 基本思想:给定一个非负矩阵V,NMF能够找到一个非负矩阵W和一个非负矩阵H,使得矩阵W和H的乘积近似等于矩阵V中的值。 非负矩阵分解(NMF) W矩阵:基础图像矩阵,相当于从原矩阵V中提取的特征。 矩阵:系数矩阵。 NMF能够广泛应用于图像分析、文本挖掘和语音处理等领域。 矩阵分解优化目标:最小化W矩阵H矩阵的乘积和原始矩阵之间的差别。 import matplotlib . pyplot as plt from sklearn import decomposition #加载PCA算法包 from sklearn . datasets import fetch_olivetti_faces #加载人脸数据集 from numpy . random import RandomState #加载RandomState用于创建随机种子 n_row , n_col = 2 , 3 #设置图像展示时的排列情况,2行三列 n_components = n_row = n_col #设置提取的特征的数目 image_shape = ( 64 , 64 ) #设置人脸数据图片的大小 dataset = fetch_olivetti_faces ( shuffle = True , random

《剑指offer》刷题-二维数组中的查找-JAVA

霸气de小男生 提交于 2020-02-06 01:09:35
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 public class Solution { public boolean Find ( int target , int [ ] [ ] array ) { int rows = array . length ; //二维数组包含的数组个数,即二维数组行的长度 int cols = array [ 0 ] . length ; //二维数组内第1个数组的长度,即第1列的长度 //左下角元素左边 int i = rows - 1 ; int j = 0 ; /* 二维数组,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序;目标整数小于; 当target小于元素a[row][col]时,那么target必定在元素a所在行的左边,即col--; 当target大于元素a[row][col]时,那么target必定在元素a所在列的下边,即row++; */ while ( i >= 0 && j < cols ) { //数组范围内 if ( target < array [ i ] [ j ] ) i -- ; else if ( target > array

(6.3)动态规划之动态规划例子-矩阵相乘

拥有回忆 提交于 2020-02-05 23:16:45
文章目录 1.问题提出 2.关键计算问题 3.完全加括号的矩阵连乘积 4.矩阵连乘问题 1.问题提出 软件行业中客户总是在变更需求 银行对我们公司开发的乘法模块还不满意。他们的真实想法并不是实现两个矩阵的乘法,而是是能一次够实现多个矩阵按照算法运算法则的乘法,因此要求我们进一步改进我们的系统,实现多个矩阵的连乘功能,并且需要看到我们设计的程序能够满足他们的运行效率要求时才付二期款。 2.关键计算问题 给定n个矩阵{ A 1 A_1 A 1 ​ , A 2 A_2 A 2 ​ ,。。。 A n A_n A n ​ }, 其中 A i A_i A i ​ 与 A i + 1 Ai+1 A i + 1 是可乘的,i=1,2,…n-1。 考察这n个矩阵的连乘积 A 1 A_1 A 1 ​ A 2 A_2 A 2 ​ … A n A_n A n ​ 由于矩阵乘法满足结合律,所以计算矩阵的连乘可以有许多不同的计算次序。这种计算次序可以用加括号的方式来确定 若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已完全加括号,则可以依此次序反复调用2个矩阵相乘的标准算法计算出矩阵连乘积 3.完全加括号的矩阵连乘积 设有四个矩阵 A,B,C,D, 它们的维数分别是: A=50 10 ,B =10 40 ,C = 40 30 D = 30 5 总共有五中完全加括号的方式,及相应的乘法次数如下 (A(

矩阵快速幂---斐波那契数列

家住魔仙堡 提交于 2020-02-05 22:21:53
矩阵快速幂就是将快速幂和矩阵乘法结合起来,快速幂我之前的博客里,矩阵乘法就是将矩阵快速幂和快速幂结合, 代码 # include <bits/stdc++.h> using namespace std ; struct node { int mat [ 15 ] [ 15 ] ; //定义矩阵 } x , y ; node mul ( node x , node y ) { //矩阵乘法 node tmp ; for ( int i = 0 ; i < 10 ; i ++ ) { for ( int j = 0 ; j < 10 ; j ++ ) { tmp . mat [ i ] [ j ] = 0 ; for ( int k = 0 ; k < 10 ; k ++ ) { tmp . mat [ i ] [ j ] + = ( x . mat [ i ] [ k ] * y . mat [ k ] [ j ] ) % 10000007 ; } tmp . mat [ i ] [ j ] = tmp . mat [ i ] [ j ] % 10000007 ; } } return tmp ; } node matpow ( node x , node y , int num ) { //矩阵快速幂 while ( num ) { if ( num & 1 ) { y = mul

RNA-seq 生物学重复相关性验证

霸气de小男生 提交于 2020-02-05 21:43:52
根据拿到的表达矩阵设为exprSet 1、用scale 进行标准化 数据中心化 :数据集中的各个数字减去数据集的均值 数据标准化 :中心化之后的数据在除以数据集的标准差。 在R中利用scale方法来对数据进行中心化和标准化 1 scale(data, center=T, scale=F) 2 3 其中,center为T,表示数据中心化 4 5 scale为T,表示数据标准化 6 7 对一个data frame的每一列进行计算 并不是表达矩阵里面的所有基因都可以进行相关性分析,首先去除reads count >1 小于5个的基因(测试样品共有6个) 1 ##过滤reads count >1 小于5 2 exprSet <- exprSet[apply(exprSet,1, function(x) sum(x>1) >5,] 3 ##reads count 差距较大,用log以及scale 缩小差距 4 M <- scale(cor(llog2(exprSet+1))) 5 ##热图 6 pheatmap(M) 2、另一种标准化 1 exprSet <- exprSet[apply(exprSet,1, function(x) sum(x>1) >5,] 2 3 ##去除文库大小差异 4 exprSet <- log(edgeR::cpm(exprSet)+1) 5 6 ##取mad