2
シフトした最大値を見つけるための線形時間アルゴリズム
非負の整数を含む配列が与えられていると仮定します(必ずしも区別されない)。A[1..n]A[1..n]A[1..n] してみましょうあること、Aは非増加順にソート。私たちは、計算したい メートル= 最大I ∈ [ N ] B [ I ] + I 。BBBAAAm=maxi∈[n]B[i]+i.m=maxi∈[n]B[i]+i.m = \max_{i\in [n]} B[i]+i. 明らかな解決策は、を並べ替えてからmを計算することです。これにより、最悪の場合に時間O (n lg n )で実行されるアルゴリズムが得られます。AAAmmmO(nlgn)O(nlgn)O(n \lg n) もっと良くすることは可能ですか?線形時間でを計算できますか?mmm 私の主な質問は上記のものです。しかし、次の問題の一般化について知ることは興味深いでしょう。 LET さAは、いくつかの比較オラクルに従ってソート≤ 及びfは、Oracleによって与えられる機能。与えられたAと神託のため≤とF、我々は計算するのに必要な時間について何を言うことができるメートル= 最大I ∈ [ N ] F (B [ I ] 、I )?BBBAAA≤≤\leqfffAAA≤≤\leqfffm=maxi∈[n]f(B[i],i)m=maxi∈[n]f(B[i],i)m = \max_{i \in [n]} f(B[i],i) それでも、O (n …