LINUX.ORG.RU

[Perl] Хэш или массив?

 


0

1

Есть небольшой справочник данных. Совсем маленький, в нём 10-20 элементов. По нему надо выполнить миллион раз поиск. Что быстрее - искать в хэше или грепать массив?

★★★★★
Ответ на: комментарий от hizel

Так ли быстрее? Хэш-функцию тоже вычислить надо, а поиск среди 10 элементов тоже моментальный.

Xellos ★★★★★
() автор топика
Ответ на: комментарий от hizel

В данном случае справочник это data => 1. У меня есть короткий список, и надо проверять приналежность к нему данных из базы. Увы, в базе его нет, так получилось.

Xellos ★★★★★
() автор топика
Ответ на: комментарий от true_admin

Неа. Не поднимается. С людьми интереснее пообщаться :) Опять же, вдруг кто предложит Python вместо перла использовать, срач начнётся :-D

Xellos ★★★★★
() автор топика
use strict;
use warnings;
use Benchmark qw(:all);
my @a = ("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m");
my %b = ("a", 1, "b", 1, "c", 1, "d", 1, "e", 1, "f", 1, "g", 1, "h", 1, "i", 1,
    "j", 1, "k", 1, "l", 1, "m", 1);

cmpthese(100000, {
        'array' => sub { foreach(@a){return 1 if $_ eq "n"}},
        'hash' => sub { return 1 if exists $b{n} },
    });
$ perl o.pl
            (warning: too few iterations for a reliable count)
            Rate array  hash
array   192308/s    --  -98%
hash  10000000/s 5100%    --
hizel ★★★★★
()
Ответ на: комментарий от Xellos

Опять же, вдруг кто предложит Python вместо перла использовать

Если искать миллион раз — нужна Java.

ovk48 ★★★
()

Python же!

Использовать массив из двухэлементных кортежей, в который первый элемент — ключ, а второй значение.

fat_angel ★★★★★
()
Ответ на: комментарий от Chaser_Andrey

какой нибудь ImmutableSet рулил бы рульнее

hizel ★★★★★
()

> Хэш или массив?

хэш, если элементов больше ≈4.

arsi ★★★★★
()
Ответ на: комментарий от akinator

>> foreach(@a){return 1 if $_ eq «n»

return grep /n/, @a

grep по всему списку проходит. return «n» ~~ \@a

anonymous
()

Всем спасибо, убедительно.

Xellos ★★★★★
() автор топика
Ответ на: комментарий от random_linux_user

Вали на Си. Там операции с памятью самые быстрые.

Зависит от кол-ва элементов. Друг тестировал различные хэш-алгоритмы, так вот на многих лямах элементов питон показал схожую производительность с http://judy.sourceforge.net/. Т.е. не всегда оверхед питона такой большой по сравнению с lookup-time.

true_admin ★★★★★
()
Ответ на: комментарий от hizel

Пост был про оверхед питона. Прежде чем заработает Objects/dictobject.c там много чего произойдёт.

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.