不同子阵列的数量

时间:2015-10-20 17:01:55

标签: algorithm combinatorics sub-array

我有2D二进制数组。大小:private class Receive extends AsyncTask<Void, String, Void> { String message; @Override protected Void doInBackground(Void... params) { while (true) { try { message = from_server.readLine(); publishProgress(message); } catch (Exception e) { e.printStackTrace(); } } } protected void onProgressUpdate(String... messages) { for (String message : messages) { chatAdapter.addItem(new ChatItem((message + "\n"))); } } } private class Send extends AsyncTask<String, Void, Void> { @Override protected Void doInBackground(String... params) { try { to_server.println(params[0]); Log.d("", "" + String.valueOf(params[0] = null)); } catch (Exception e) { Log.d("", "" + e.getMessage()); e.printStackTrace(); } return null; } } x M例如N x 13数组可以如下所示: 2

是否可以说我们可以制作多少个不同的2d子阵列? 1010101010110 1010011111000 x M数组也是子数组。

没有单词N我认为子数组的数量是:different是真的吗?

1 个答案:

答案 0 :(得分:0)

在测试中

当然,对于不同大小的子矩阵的数量,它只是m x n,因为对于每个行的长度,都有一段你可以切片的列。

但是对于更有趣的问题,你可以生成多少2d数组的排列,下面的代码显示了这一点:

permutations = []
for i in 1...m {
    for j in 1...n {
        // now we make all possible i x j matrices
        for k in 0..<floor(m / i) + 1 {
            for l in 0..<floor(n / j) + 1 {
                permutations.append(input[k:k+i,l:l+j])
            }
        }
    }
}

所以它就像:

m * n * (2m+1 + floor(m/2) + floor(m/3) + ... + floor(m / (m-1))) * (2n+1 + floor(n/2) + floor(n/3) + ... + floor(n / (n-1)))