使用Any type element和key_insert优化Heap::Simple中的插入和二次排序

发布于 2024-09-08 02:13:40 字数 1049 浏览 5 评论 0原文

之前,我将元素条目定义为 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 堆

Before, I had defined my elements entry as just Array in Heap::Simple because I did not need a secondary sort.

After implementing a secondary sort and a function for defining the elements to insert array references into a heap I made, the runtime of my insertions increased (alot!). This is covered in the documentation for Heap::Simple under Any

However I have a hard time understanding the drawbacks of using the Any element type. Will I be creating extra array references? Should I be using key_insert to decrease runtime?

Here is the code as it currently stands:

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] ]; 
}

Context: Inserting Array References into Perl Heap

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文