完全可逆的子矩阵


16

(受到有关数学问题的启发)

定义

给定一个n x n方阵一个,我们可以把它invertible是否存在某些n x n方阵,使得AB = BA = ñ,与ñ是大小的单位矩阵n x n(与主对角线的矩阵1S和别的0)和ABBA代表通常的矩阵乘法(在此不做介绍-采用线性代数类)。

从这一点,我们可以称之为一个m x n矩阵C ^ totally invertible如果每一个k x k的子矩阵(定义见下文)Ç是可逆的所有k > 1k <= (smaller of m,n)

子矩阵定义为从原始矩阵删除任何数量的行和/或列之后的结果矩阵。例如,可以通过如下删除第一行和中间一列,将下面的3x3矩阵C转换为2x2子矩阵C'1 2 32 5 8

C = [[1 2 3]
     [4 5 6]    -->  C' = [[4 6]
     [7 8 9]]              [7 9]]

请注意,有许多不同的子矩阵可能性,以上仅是示例。此挑战仅与所产生的子矩阵为k x k 方阵的问题有关

挑战

给定一个输入矩阵,确定它是否完全可逆。

输入

  • 一个大小单一的矩阵m x n任何合适的格式
  • 在不失一般性的前提下,您可以假设m <= nm >= n,无论哪个对您的代码而言都是更合适的,然后以这种方式进行输入(即,您可以免费获得转置操作)。
  • 输入矩阵的大小将不小于3 x 3,并且也不得大于您的语言可以处理的大小。
  • 输入矩阵将仅包含来自Z +的数值(正整数)。

输出

规则

  • 完整的程序或功能都是可以接受的。
  • 禁止出现标准漏洞
  • 这是因此所有常见的高​​尔夫规则都适用,并且最短的代码(以字节为单位)获胜。

例子

Truthy

[[1 2 3]
 [2 3 1]
 [3 1 2]]

[[2 6 3]
 [1 12 2]
 [5 3 1]]

[[1 2 3 4]
 [2 3 4 1]
 [3 4 1 2]]

[[2  3  5  7  11]
 [13 17 19 23 29]
 [31 37 41 43 47]]


Falsey

[[1 2 3]
 [4 5 6]
 [7 8 9]]

[[1 6 2 55 3]
 [4 5 5 5  6]
 [9 3 7 10 4]
 [7 1 8 23 9]]

[[2 3 6]
 [1 2 12]
 [1 1 6]]

[[8 2 12 13 2]
 [12 7 13 12 13]
 [8 1 12 13 5]]

奇异子矩阵在2 6 3; 1 12 2; 5 3 1哪里?
feersum

1
@feersum哎呀-谢谢大家。那应该在Truthy之下了,下面的那个应该6在角落里了,而不是7。笨拙的错字。
AdmBorkBork '16

起初,我以为标题是“完全可逆式潜水艇”。
user2357112支持Monica

Answers:


5

果冻 26 24 23 20 19 17 16 字节

-1个字节要感谢@miles(在获取行列式时,不需要每个,)-
2个字节,再次@miles!(不必要的链分离和Ѐ快速使用)

ZœcLÆḊ
œcЀJÇ€€Ȧ

TryItOnline!全部8个测试

怎么样?

œcЀJÇ€€Ȧ  - Main link: matrix as an array, M
    J      - range of length -> [1,2,...,len(a)] (n)
  Ѐ       - for each of right argument
œc         -     combinations of M numbering n
     Ç€€   - call the last link (1) as a monad for €ach for €ach
        Ȧ  - all truthy (any determinant of zero results in 0, otherwise 1)
                 (this includes an implicit flattening of the list)

ZœcLÆḊ - Link 1, determinants of sub-matrices: row selection, s
Z      - transpose s
   L   - length of s
 œc    - combinations of transposed s numbering length of s
    ÆḊ - determinant

我以为我需要它,因为我有很多组合,但是不,我不需要明确地指示。谢谢!
乔纳森·艾伦

我使用的决定因素了解到从去年的挑战,并验证它确实确实有ldepth = 2
英里

1
另外,我认为您可以使用-miles 2保留一个字节,ZœcLÆḊ并在主链接中保留另一个字节,çЀJȦ
距离

好东西@miles再次感谢!我以为这两个中的第一个在我尝试时不起作用,但是一定是在我用高尔夫球打球时。完全忘记了Ѐ
乔纳森·艾伦

2
很好的结合,我想如果您愿意的话œcЀJµZœcLÆḊµ€€Ȧ,也可以将它做成一个单一的班轮,也就是16字节
英里

4

Mathematica 10.0,34个字节

#~Minors~n~Table~{n,Tr@#}~FreeQ~0&

一条6波浪式链条...新的个人记录!


3

MATL,57个字节

tZyt:Y@!"@w2)t:Y@!"@w:"3$t@:)w@:)w3$)0&|H*XHx]J)]xxtZy]H&

当然,您可以在线尝试!

输入应为“纵向”方向(nRows> = nColumns)。我觉得这可能不是最有效的解决方案……但是至少我要给别人留出一些空间让我失望。我希望听到一些可能使此特定方法更短的特定提示,但我认为,如此庞大的字节数应该会启发其他人使用完全不同的方法来制作MATL条目。如果为假,则显示0;如果为真,则显示较大的值(如果矩阵太大,将迅速变为Inf;对于额外的1个字节,可以H*H&Y(逻辑和)代替)。感谢@LuisMendo,节省了几个字节。

tZy  % Duplicate, get size. Note that n=<m.   
%   STACK:  [m n], [C]
t: % Range 1:m                           
%   STACK:  [1...m], [m n], [C]
Y@   % Get all permutations of that range. 
%   STACK:  [K],[m n],[C] with K all perms in m direction.
!"   % Do a for loop over each permutation.
%   STACK:  [m n],[C], current permutation in @.
@b   % Push current permutation. Bubble size to top.
%   STACK:  [m n],[pM],[C] with p current permutation in m direction.
2)t:Y@!" % Loop over all permutations again, now in n direction
%   STACK: [n],[pM],[C] with current permutation in @.
@w:" % Push current permutation. Loop over 1:n (to get size @ x @ matrices)
%   STACK: [pN],[pM],[C] with loop index in @.
3$t  % Duplicate the entire stack.
%   STACK: [pN],[pM],[C],[pN],[pM],[C]
@:)  % Get first @ items from pN
%   STACK: [pNsub],[pM],[C],[pN],[pM],[C]
w@:) % Get first @ items from pM
%   STACK: [pMsub],[pNsub],[C],[pN],[pM],[C]
w3$)  % Get submatrix. Needs a `w` to ensure correct order.
%   STACK: [Csub],[pN],[pM],[C]
0&|  % Determinant.
%   STACK: [det],[pN],[pM],[C]
H*XHx% Multiply with clipboard H.
%   STACK: [pN],[pM],[C]
]    % Quit size loop
%   STACK: [pN],[pM],[C]. Expected: [n],[pM],[C]
J)   % Get last element from pN, which is n.
%   STACK: [n],[pM],[C]
]    % Quit first loop
xxtZy% Reset stack to
%   STACK: [m n],[C]
]    % Quit final loop.
H& % Output H only.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.