Forum Webscript.Ru
Программирование => Perl => Тема начата: AliMamed от 29 Марта 2001, 18:59:39
-
поделитесь кто как реализовывает сабдж.
мне известен только вариант составление нового(рассортированного) массива сбором рэндом из сортированного.
а нельзя как-то проще это сделать?
-
Достаточно случайным образом поменять местами несколько элементов.
-
ну в общем в моем случае это и делается - только не "местами", а все элементы массива =)
вопрос то вот наверное как надо было сформулировать. есть ли в перле аналог функции shuffle, которая есть в РНР?
-
AliMamed (30-03-2001 10:21):
вопрос то вот наверное как надо было сформулировать. есть ли в перле аналог функции shuffle, которая есть в РНР?
А что она в PHP делает?
-
меняет порядок элементов массива в произвольном порядке
-
AliMamed (30-03-2001 11:33):
меняет порядок элементов массива в произвольном порядке
такой нет, IMHO.
-
AliMamed (30-03-2001 11:33):
меняет порядок элементов массива в произвольном порядке
perldoc -q shuffle
-
Точно. :)
Use this:
# fisher_yates_shuffle( \\@array ) :
# generate a random permutation of @array in place
sub fisher_yates_shuffle {
my $array = shift;
my $i;
for ($i = @$array; --$i; ) {
my $j = int rand ($i+1);
next if $i == $j;
@$array[$i,$j] = @$array[$j,$i];
}
}
fisher_yates_shuffle( \\@array ); # permutes @array in place
You\'ve probably seen shuffling algorithms that work using
splice, randomly picking another element to swap the current
element with:
srand;
@new = ();
@old = 1 .. 10; # just a demo
while (@old) {
push(@new, splice(@old, rand @old, 1));
}
This is bad because splice is already O(N), and since you do it
N times, you just invented a quadratic algorithm; that is,
O(N**2). This does not scale, although Perl is so efficient that
you probably won\'t notice this until you have rather largish
arrays.
-
NAS (30-03-2001 17:12):
Точно. :)
что точно-то?
у меня тута ни шелла ни перлдока нету, но если енто его ответ, то значит не фига такой функции нету, потому что так как в первом примере показано так (ну почти так=)) я и делаю
-
А у меня тут тоже шела нет :)
Есть Перл от Activstate, а там встроенный perldoc.