您好,我将解释我需要什么。我希望使用递归方法将数组拆分为分为每个子数组一半的子数组。
我的意思是,例如,如果我有一个数组a = [1,2,3,4]
我想从这个数组数组中获得:h = [[1,2],[3,4],[1],[2],[3],[4]]
我尝试多种方式,并认为递归是最好的方法,但我无法达到如何做。
答案 0 :(得分:1)
在Python中:
>>> def split_array(array):
if len(array) <= 1:
return array
else:
return [array[:len(array)//2], array[len(array)//2:]]
>>> def halves(array):
if len(array) <= 1:
return [array]
else:
parts = split_array(array)
return [array] + halves(parts[0]) + halves(parts[1])
>>> halves([1, 2, 3, 4])
[[1, 2, 3, 4], [1, 2], [1], [2], [3, 4], [3], [4]]
>>> halves([1, 2, 3, 4])[1:]
[[1, 2], [1], [2], [3, 4], [3], [4]]
这不会按顺序生成子阵列。我会使用迭代方法。
答案 1 :(得分:0)
在Matlab中,使用单元格,仅用于偶数长度的数组
a = [1, 2, 3, 4]
b= a(1:numel(a)/2);
c= a(numel(a)/2+1:end);
d= num2cell(a);
%
O={b,c,d{:}};
读取值:
O{i} with i={1,...,6}
修改强>
对于奇数和偶数长度的数组(但对于奇数加长的数组,您需要根据所需的分割调整r
的值)
a = [1, 2, 3, 4, 5]
r = floor(numel(a)/2);
b= a(1:r);
c= a(r+1:end);
d= num2cell(a);
%
O={b,c,d{:}};
答案 2 :(得分:0)
这是一个Matlab解决方案(注意将这两个函数放在一个名为split_array.m的文件中):
function O = split_array(I)
% Wrapper function to sort the output of the recursive output
O = split_array_R(I);
[~,ind] = sort(cellfun(@numel, O), 'descend');
O = O(ind);
end
function O = split_array_R(I, I1, I2)
if ~iscell(I)
n = ceil(numel(I)/2);
I1 = I(1:n);
I2 = I(n+1:end);
I = {I};
end;
if numel(I1) > 1
O1 = split_array_R(I1);
else
O1 = {I1};
end
if numel(I2) > 1
O2 = split_array_R(I2);
else
O2 = {I2};
end
O = {I{:}, O1{:}, O2{:}};
end