Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 查找仅包含个的二进制数组的最大非连续子集_Arrays_Algorithm - Fatal编程技术网

Arrays 查找仅包含个的二进制数组的最大非连续子集

Arrays 查找仅包含个的二进制数组的最大非连续子集,arrays,algorithm,Arrays,Algorithm,我有一个二维二进制数组,例如: A = [[1, 1, 1, 1, 1], [1, 0, 1, 1, 0], [1, 1, 1, 1, 1], [1, 0, 1, 1, 1], [1, 1, 1, 1, 1]] cols = [0, 1, 2, 3, 4] rows = [0, 2, 4] 我正在寻找一个良好的缩放算法,以找到最大可能的非连续子数组,只包含一个。 [编辑: 通过非连续子数组我指的是原始数组中任意列和行的子集。这相当于从原始数组中逐渐删除

我有一个二维二进制数组,例如:

A = [[1, 1, 1, 1, 1],
     [1, 0, 1, 1, 0],
     [1, 1, 1, 1, 1],
     [1, 0, 1, 1, 1],
     [1, 1, 1, 1, 1]]
cols = [0, 1, 2, 3, 4]
rows = [0, 2, 4]
我正在寻找一个良好的缩放算法,以找到最大可能的非连续子数组,只包含一个。 [编辑: 通过非连续子数组我指的是原始数组中任意列和行的子集。这相当于从原始数组中逐渐删除行或列,目的是删除“0”

结果应该是两个列表,一个列索引列表和一个行索引列表。子数组定义为列索引列表中指定的所有列与行索引列表中指定的所有行的交点,即列索引位于列列表中且行索引位于行列表中的所有元素

在这种情况下,(基于零的索引)结果为

cols = [0, 2, 3, 4]
rows = [0, 2, 3, 4]
产生4x4子阵列,例如:

A = [[1, 1, 1, 1, 1],
     [1, 0, 1, 1, 0],
     [1, 1, 1, 1, 1],
     [1, 0, 1, 1, 1],
     [1, 1, 1, 1, 1]]
cols = [0, 1, 2, 3, 4]
rows = [0, 2, 4]
被认为是次优的,因为它只产生一个3x5子矩阵

[编辑:

现在,我正在使用一种算法,在该算法中,我迭代删除该列或行,该列或行的“1”百分比最低,直到不剩下“0”,而每次删除后我都必须重新计算该百分比

这实际上给出了一些结果,但是,我不确定,就最大数量的“1”而言,这是否是最优的。

以下代码使用numpy在Python中实现此算法:

def find_子集(输入_数组,阈值):
行选择=列表(范围(输入数组形状[0]))
col_sel=list(范围(input_array.shape[1]))

boolean_array=(输入_array没有示例工作,解释不好…我相信在你改进你的问题之前没有人会帮你。什么是“非连续子数组”?定义你的术语。感谢你的评论。为了澄清我的问题,我更新了问题。