微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > 微电子学习交流 > 数组元素组合问题,谢谢

数组元素组合问题,谢谢

时间:12-12 整理:3721RD 点击:
比如有一个数组 1 2 3 4
我要分成这样的两份,
1 234
2 134
3 124
4 123
12 34
13 24
14 23
数组的元素的个数是动态的,有什么算法呢,
谢谢各位大侠。

分组的依据就是分成两组,
考虑到各种组合,
和顺序没关系,哪个开头无所谓的

一共是N!个
最简单的算法就是f(r1,r2..rn)=r1f(r2..rn)+r2f(r1,r3..rn)+r3+f(r1,r2,r4..rn)+...
我用python写了一个
def perm(A):
    res=[]
    if len(A)==1:
        return [A]
    else:
        for a in A:
            rest=A.replace(a,'')
            t=str_mul(a,perm(rest))
            res.extend(t)
        return res
def str_mul(a, B):
    tl=[]
    for b in B:
        tl.append(a+b)
    return tl

result=perm('1234')
print len(result),result

谢谢,python看不懂啊,
我在网上看到个C的,然后改成perl的,
用的递归
sub subset {
    my ($a, $n, $m, $b, $M) = @_ ;
    @a = @{$a} ;
    @b = @{$b} ;
    for ( my $i = $n; $i >= $m; $i = $i - 1 )  {
        $b[$m - 1] = $i - 1 ;
        if ( $m > 1 )  {
            subset (\@a, $i - 1, $m - 1, \@b, $M);            
        } else  {
            my @split1 = () ;
            my @split2 = () ;
            for ( my $j = $M - 1; $j >= 0; $j = $j - 1 )  {
                push @split1, $a[ $b[$j] ] ;
            }
            print @split1, "\n" ;
            @split2 = grep(!defined $split1{$_}, @a);
            print @split2, "\n" ;
        }
    }  
}  
  
$scalar_load = @load ;
print $scalar_load, "\n" ;
for ( my $i = 1; $i <= $scalar_load/ 2; $i = $i + 1 )  {
    print "split $i : \n" ;
    my @ss = (0) ;
  
    subset ( \@load, $scalar_load, $i, \@ss, $i ) ;
}

这一句执行有问题,
@split2 = grep(!defined $split1{$_}, @a);
@a       是 1 2 3 4
@split1  是 2 3
@split2怎么得到 1 4 呢? 就是把@a里面的@split1元素给删掉得到的数组。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top