Thread Immer hälftig einfügen? (18 answers)
Opened by bianca at 2012-02-15 11:01

hlubenow
 2012-02-16 17:42
#156188 #156188
User since
2009-02-22
875 Artikel
BenutzerIn
[default_avatar]
2012-02-16T13:38:26 bianca
2012-02-15T22:05:54 hlubenow
Aber was genau meinst Du, mit "von vorne anfangen"?

...
Mit von vorne anfangen meine ich den Fall, dass die einzufügenden Elemente mehr sind als die vorhandenen.
Wenn also in eine 10er Reihe 20 Elemente rein sollen läßt sich die 10er Reihe im ersten Durchlauf ja maximal 9 mal halbieren. Das heißt, nach dem ersten Durchlauf wurden 9 Elemente eingefügt, die Ausgangsmenge beträgt 19 und es sind noch 11 nicht eingefügt.
Und jetzt soll der selbe Algorithums also die 11 Elemente in die bestehende 19er Menge jeweils wieder schön hälftig vorne/hinten/vorne/hinten einfügen.
And so on bis alle einzufügenden Elemente weg sind und am Ende die Menge 30 beträgt.

Hmm, etwas merkwürdig, da doch eigentlich jedes einzelne Einfügen die Ausgangsliste schon vergrößert. Aber gut, man kann natürlich bei der Berechnung der Positionen diesen Effekt erstmal ignorieren und danach alles auf einmal einfügen. Vielleicht so:
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
33
34
35
36
37
38
39
40
#!/usr/bin/perl

use warnings;
use strict;

use vars qw($b $c $d $e $i $x);

sub insert {
    my $valuetoinsert = pop;
    my $position = pop;
    my @thelist = @_;
    splice(@thelist, $position, 0, $valuetoinsert);
    return @thelist;
}

my $nrlist = 500;
my $nrin = 200;
my @l = (1 .. $nrlist);
my @in = (1 ..$nrin);
$x = 0;
$b = $nrlist;
@l = insert(@l, int($b / 2), $in[$x]);
while ($x < $nrin) {
    $c = $b / 2;
    $d = int(($b - $c) / 2);
    $e = int(($b + $c) / 2);
    if ($d == 0 || $e == 0) {
        $b = $#l + 1;
        next;
    }
    @l = insert(@l, $d, $in[$x]);
    $x ++;
    @l = insert(@l, $e, $in[$x]);
    $x ++;
    $b = $c;
}

for($i = 0; $i <= $#l; $i++) {
    print "$i\t$l[$i]\n";
}

Es werden offenbar 200 Werte in eine Liste von 500 anderen Werten eingefügt.
Trotzdem bin ich nicht sicher, ob das jetzt so richtig ist. Aber ein Ausgangspunkt könnte der Code sein. Erhebt aber wie gesagt nicht den Anspruch, schon die fertige Lösung zu sein.
Last edited: 2012-02-17 14:42:29 +0100 (CET)

View full thread Immer hälftig einfügen?