ocehb: (Default)
[personal profile] ocehb

1. 
my $i; for ($i = 0; $i < scalar @array; $i++) { last if ($array[$i] == $value); }


2. 
my $i = 0; foreach (@array) { last if ($_ == $value); $i++; }


3. 
my $i = 0; map { $_ == $value ? last : $i++ } @array; }


Проверка:

# perl -MBenchmark=timethese -de0
  DB<1> @array = map { int rand 10240 } 1..10240
  DB<2> $value = 6000
  DB<3> timethese (10_000,{'A' => q|my $i; for ($i = 0; $i < scalar @array; $i++) { last if ($array[$i] == $value); }|,\
                           'B' => q|my $i = 0; foreach (@array) { last if ($_ == $value); $i++; }|,\
                           'C' => q|my $i = 0; map { $_ == $value ? last : $i++ } @array;|})
Benchmark: timing 10000 iterations of A, B, C...
         A: 56 wallclock secs (46.91 usr +  0.02 sys = 46.93 CPU) @ 213.08/s (n=10000)
         B: 36 wallclock secs (31.43 usr +  0.01 sys = 31.44 CPU) @ 318.07/s (n=10000)
         C: 35 wallclock secs (35.03 usr +  0.00 sys = 35.03 CPU) @ 285.47/s (n=10000)


Date: 2006-05-19 06:26 am (UTC)
From: [personal profile] alll
Да ты никак "перл кукбук для гиков" замутить решил? :)

Глядя на тайминги

Date: 2006-05-19 06:29 am (UTC)
From: [personal profile] alll
То-есть надо быть проще? :)

Re: Глядя на тайминги

Date: 2006-05-19 06:44 am (UTC)
From: [personal profile] alll
Переполнение? Перл небось ещё старый был...

Date: 2006-05-19 06:45 am (UTC)
From: [personal profile] alll
вот и я говорю...

Re: Глядя на тайминги

Date: 2006-05-19 07:22 am (UTC)
From: [personal profile] alll
Так если не переполнение - откуда глюк? Погрешность округления в последних знаках float?

Re: Глядя на тайминги

Date: 2006-05-19 07:37 am (UTC)
From: [personal profile] alll
Разве что уже решено поставить неуд. Я так и не нашёл отличий в работающем в плюс и в работающем в минус варианте. :) И даже если предположить, что map крутанулся всего один раз - непонятно, откуда такой жирный минус.

Re: Глядя на тайминги

Date: 2006-05-19 07:49 am (UTC)
From: [personal profile] alll
Дык для last вполне можно юзать метки - если сомневаешся, для чего именно он last. Хотя раз пошла такая пьянка - тут и goto покатит. :)

Re: too few iterations

Date: 2006-05-19 07:51 am (UTC)
From: [personal profile] alll
Да я просто не знаю, по какой формуле там считается и как реагирует на досрочное завершение. Лень rtfm'ить. :)

Гадая на кофейной гуще

Date: 2006-05-19 07:53 am (UTC)
From: [personal profile] alll
Оно там что, первые несколько итераций не засчитывает, чтоб участок разгона пропустить? :)

Re: Глядя на тайминги

Date: 2006-05-19 07:57 am (UTC)
From: [personal profile] alll
Дополнительный блок, оборачивающий map с меткой в его начале и эту метку как параметр last'у скормить - тоже прокатывает? :)

Re: too few iterations

Date: 2006-05-19 08:01 am (UTC)
From: [personal profile] alll
Ну так пузомерка, как я понимаю, всё внутри eval пускает или там как-то иначе?

Re: Глядя на тайминги

Date: 2006-05-19 08:05 am (UTC)
From: [personal profile] alll
То-есть last без параметров выкидывает не из того блока? Типа куда-то за пределы внутреннего цикла timethese?

А в исходном посте квазинормальные результаты только за счёт слишком большой длинны массива, в котором идёт поиск?

Re: too few iterations

Date: 2006-05-19 08:11 am (UTC)
From: [personal profile] alll
А! Вот теперь видно. Нехер склеивать plaintext'ом что попало без обёрток. Первейшее дело для хака. :)

Profile

ocehb: (Default)
ocehb

January 2021

S M T W T F S
     12
345 6789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 8th, 2026 01:27 pm
Powered by Dreamwidth Studios