Size: a a a

2020 January 11

AP

Anton Petrusevich in Modern::Perl
условно-сравнима. алгоритм выплоняется в нынешних реалиях быстрее доступа к памяти
источник

AP

Anton Petrusevich in Modern::Perl
$a[rand()*1e8] — ты, кстати, понимаешь, что этот код даёт непредсказуемое количество реаллокаций памяти?
источник

AT

Artem Tepponen in Modern::Perl
В смысле? Он в среднем должен сожрать память. Ты про какие реаллокации?
источник

AP

Anton Petrusevich in Modern::Perl
про реаллокацию массива для @a
источник

AP

Anton Petrusevich in Modern::Perl
вот смотри, допустим первы ранд выдал 1, ты создал массив на 1 элемент. а следующий на тыщу — перл реаллоцирует память для массива, в перле нет спарсед массивов, все элементы до тысячного будут тоже аллоциорваны, хоть и андефы. а следующий ранд 10 тыщ и снова реаллокация с копированием того что уже есть
источник

AT

Artem Tepponen in Modern::Perl
Anton Petrusevich
да. вот, к примеру, в чём принципиальная разница межде
my %h; for(my $i = 0;$i < 1000; ++$i) { $h{$i} = $i }
и  
my @a; for(my $i = 0;$i < 1000; ++$i) { $a[$i] = $i }
Так какой ты хотел ответ на изначальный вопрос? )
источник

AP

Anton Petrusevich in Modern::Perl
я о двух принципиальных частях уже говорил
источник

AT

Artem Tepponen in Modern::Perl
Ладно, наверное на сегодня хватит
источник

AT

Artem Tepponen in Modern::Perl
Кому не влом, замеряйте, сколько будет выполняться
perl -le 'for my $j (1e9..1e9+100) { my @a; for(my $i = 0;$i < 10000; ++$i) { $a[rand()*1e9] = $i } }'
источник

VO

Vyacheslav Olkhovchenkov in Modern::Perl
напомнили вы мне алгоритм подсчета бит в числе через вычисление идеальной хэш-функции
источник

TZ

Troll Zhuravlev in Modern::Perl
Крайне странная конструкция, так нигде не применяется ))
$a[rand()*1e9] = $i
источник

TZ

Troll Zhuravlev in Modern::Perl
я не представляю, что этим можно измерить, только скорость переназначения элементов массива и фсе
источник

AP

Anton Petrusevich in Modern::Perl
и ещё немного странно делать бенчмарк системным time вместо соответствюущего модуля
источник

AT

Artem Tepponen in Modern::Perl
Да без разницы в данном случае:

# /bin/time perl -le 'for my $j (1e9..1e9+100) { my @a; for(my $i = 0;$i < 10000; ++$i) { $a[rand()*1e9] = $i } }'
132.87user 0.51system 2:13.40elapsed
источник

AP

Anton Petrusevich in Modern::Perl
правильно было бы сначала таки выделить память
источник

AT

Artem Tepponen in Modern::Perl
# /bin/time perl -le 'for my $j (1e9..1e9+100) { my %h; for(my $i = 0;$i < 100000; ++$i) { $h{rand()*1e9} = $i } }'
9.57user 0.00system 0:09.58elapsed 99%CPU
источник

TZ

Troll Zhuravlev in Modern::Perl
time - проще и мне больше нравится, например ) так что time - круто
источник

AP

Anton Petrusevich in Modern::Perl
тайм меряет слишком много
источник

AT

Artem Tepponen in Modern::Perl
Troll Zhuravlev
Крайне странная конструкция, так нигде не применяется ))
$a[rand()*1e9] = $i
Ессно, это микробенчмарк, надо засрать весь массив
источник

TZ

Troll Zhuravlev in Modern::Perl
а кто тебе мешает засирать его последовательно
$a[$i] = rand()*1e9
?
источник