题
实施并不难,但是如果可能的话,我希望代码重复使用。
my @arr = (2,3,4,5,5,5,4,4,3,1,1,2,3,0,2,4);
my $ret = {MAXIMA=>[{INDEX=>3, VAL=>5},{INDEX=>4, VAL=>5},{INDEX=>5, VAL=>5}],
MINIMA=>[{INDEX=>9, VAL=>1},{INDEX=>10, VAL=>1},{INDEX=>13, VAL=>0}]}
那么,您知道是否有实现类似内容的模块?
解决方案
这可能只是CPAN的差距。它可以使用当地的极端模块。考虑抛光一个并发布它!
本地最大密码(故意优化以理解性,而不是效率):
请注意,当您考虑当地极端情况时,应该出现一些问题:应该包括终点吗?如果极值由几个连续的(平等)数据点组成,则您是否想要第一个,最后一个或全部的索引?您想要全部极端还是顶部K?如果多个最大值或最小值近距离发生(彼此之间),您是否想要全部或仅一个?一个好的模块会让人们准确选择他们想要的答案。
其他提示
我知道没有CPAN模块,但是在此线程中可以找到对“顶级X Local Extreara”的很好的讨论: http://www.perlmonks.org/?node_id=629742 - 任务更困难的“查找k top maxima”,而不是“所有本地最大值”
我不知道有任何CPAN模块可以这样做。但是,对于起点,请检查一下 List::Util
(核心模块)和 List::MoreUtils
CPAN模块应帮助您构建解决方案。
例如:
use List::Util qw/min max/;
my $min = min @arr;
my $max = max @arr;
或者
use List::MoreUtils ':all';
my ($min, $max) = minmax @arr;
# and then...
my @maxima_indexes = indexes { $_ == $max } @arr;
# global maxima...
my @maxima = map { {INDEX => $_, VAL => $max} } @maxima_indexes;
/i3az/
不隶属于 StackOverflow