自分の極端なすべての極端をPerlで手に入れるにはどうすればよいですか?
質問
実装するのはそれほど難しくありませんが、可能であればコードの再利用を好みます。
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のギャップにすぎない場合があります。ローカル極端モジュールを使用できます。 1つを磨き、公開することを検討してください!
ローカルマキシマコード(効率ではなく理解性のために意図的に最適化):
地元の極端について考えるときに発生するべき質問がいくつかあることに注意してください。エンドポイントを含めるべきですか?極値がいくつかの連続した(等しい)データポイントで構成されている場合、最初、最後の、またはすべてのインデックスが必要ですか?あなたはすべての極端を望んでいますか、それともトップKだけですか?複数の最大値または最小値が近接して(互いにN内)発生する場合、すべてまたは1つだけが必要ですか?優れたモジュールは、人々が自分が望む答えを正確に選択できるようにします。
他のヒント
私が知っているCPANモジュールはありませんが、このスレッドには「トップxローカル極端」の素晴らしい議論があります。 http://www.perlmonks.org/?node_id=629742 - タスク「すべての局所的最大」の代わりに、より難しい「kトップマキシマを見つける」があります
これを行う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