使用Any type element和key_insert优化Heap::Simple中的插入和二次排序
之前,我将元素条目定义为 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] ];
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论