これは宿題です。
目標は、数値の配列を検索し(整数または> 0かどうかを指定しない)、任意の2つの数値の比率が特定のxに等しいかどうかを確認するアルゴリズムを擬似コードで提示することです。時間計算量はO(nlogn)未満でなければなりません。
私のアイデアは、配列(O(nlogn)時間)をマージソートしてから、|x|の場合にマージソートすることでした。> 1(バイナリトラバーサルアルゴリズムを使用して)降順ですべての番号のチェックを開始します。チェックには、各番号に対してO(logn)時間もかかる必要があり、最悪の場合、n回のチェックで合計O(nlogn)が得られます。私が何も見逃していない場合、これは、割り当てのパラメーター内で、O(nlogn)+ O(nlogn)= O(nlogn)の最悪のケースを与えるはずです。
ソート後に比率をチェックし始める場所はそれほど重要ではないことはわかっていますが、時間コストは1/2で償却されます。
私の論理は正しいですか?より高速なアルゴリズムはありますか?
明確でない場合の例:
与えられた配列{4、9、2、1、8、6}
2の比率で検索したい場合。
マージソート{9、8、6、4、2、1}
与えられた比率は>1なので、左から右に検索します。
2a。最初の番号は9です。9/4>2をチェックします。9/6<2次の番号をチェックします。2b。2番目の数字は8です。8/4=2をチェックしています。完了