Использование элемента любого типа и key_insert для оптимизации вставки и вторичной сортировки в Heap :: Simple - PullRequest
2 голосов
/ 02 июля 2010

Раньше я определял запись своих элементов как просто массив в Heap::Simple, потому что мне не требовалась вторичная сортировка.

После реализации вторичной сортировки и функции определения элементов для вставки ссылок на массивы в созданную мной кучу время выполнения моих вставок увеличилось (много!).Это описано в документации для Heap::Simple в Any

Однако мне сложно понять недостатки использования типа элемента Any.Буду ли я создавать дополнительные ссылки на массив?Должен ли я использовать key_insert, чтобы уменьшить время выполнения?

Вот код в том виде, в каком он есть на данный момент:

my $heap = Heap::Simple->new( order     => \&by_num_or_str,
                              elements  => [Function => \&first_two_slots]
                             );

sub by_num_or_str
{
    my ( $a, $b ) = @_;

    my $result = 
        $b->[0] <=> $a->[0]  #0-th element is a number
                ||
        $a->[1] cmp $b->[1]; #1-st element is a string

    return $result == -1;
}

sub first_two_slots 
{ 
    my $array_ref = shift; 
    return [ @$array_ref[0,1] ]; 
}

Контекст: Вставка ссылок на массив в Perl Heap

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...