Perl:获取perl中值的最大长度,优于O(N)?

时间:2015-03-03 15:11:39

标签: perl

my $max_cs = 0;
foreach my $cs (values %{$j{$type}}) {
    $max_cs = length($cs) > $max_cs ? length($cs) : $max_cs;
}

上述是否可以比O(N)更好?可能在哈希以外的其他数据结构中?

是否可以在线程之间共享优先级队列?

可以使用Hash::PriorityQueue

在线程之间共享threads::shared

2 个答案:

答案 0 :(得分:4)

  

上述是否可以比O(N)更好?可能在哈希以外的其他数据结构中?

不,找不到N个项目中最长的项目通常不能在O(N)以内完成。

没有额外的信息,在N(N)时间内找不到最长的N个元素是不可能的,因为它需要获得所有N个字符串的长度。在线程之间划分工作将工作除以一个因子,因此最佳解决方案仍为O(N)。

如果您有额外的信息,那么可能会设计出比O(N)更好的解决方案。例如,如果字符串按长度排序,则存在O(1)解决方案。

  

是否可以在线程之间共享优先级队列?

任何数据结构都可以成为线程安全的。

  

可以使用Hash::PriorityQueue

在线程之间共享threads::shared

没有

答案 1 :(得分:1)

要发现最长的哈希值,必须测量和比较每个值。这是O(N)操作。

计算机处理器并不是真的会同时做几件事 - 软件就是这样做的。因此,除非您有办法同时使用多个处理器,否则您的想法将浪费时间将流程分成多个无法并行执行的线程。

并行性通常仅适用于可以同时运行的IO操作。

如果您在执行速度方面遇到问题,那么最好的解决方案是在创建哈希时保留一个单独的哈希值排序列表(如果可能的话)。