Thread Rekursiver Algorithmus zur Kombinatorik optimierbar? (11 answers)
Opened by ariser at 2013-10-05 21:31

topeg
 2013-10-06 00:37
#170995 #170995
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Jede rekursive Lösung lässt sich als Iterative darstellen.

Ich würde es wohl so machen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/perl
use strict;
use warnings;

my @typeset = qw(P K L G);
my $length = 10;
strangemultiset(\@typeset,$length);

sub strangemultiset {
  my ($typeset,$length)=@_;
  my @lst=map{1}@$typeset;
  while(@lst <= @$typeset) {

    my $len=0;
    $len+=$_ for(@lst);
    if($len >= $length) {
      my @out;
      push(@out, ($typeset[$_]) x $lst[$_]) for(0..$#$typeset);
      print join('.',@out)."\n";
    }

    $lst[0]++;
    for my $p (0..$#lst) {
      my $left = 0;
      $left += $_ for(@lst);
      if($left > $length) {
        $lst[$p] = 1;
        $lst[$p+1] ++ ;
      }
    }
  }
}


Wobei fraglich ist, ob die Lösung schneller ist als die Rekursive. Speicher sparender dürfte sie wohl sein.

View full thread Rekursiver Algorithmus zur Kombinatorik optimierbar?