0
3から始まる連続した奇数配列があります。So x = {3,4,5,6,7,8,9,10,11,12,13 ...}。 数字nの正方形がどのインデックスにあるかを素早く見つける方法があるのだろうかと思います。したがって、nが5の場合、配列内に25がどこにあるかを探しています。今、私は現在のインデックスに追加する((n)*(n - 1))を持っています。何か速いですか?オッズの連続配列で数値の2乗を求める
3から始まる連続した奇数配列があります。So x = {3,4,5,6,7,8,9,10,11,12,13 ...}。 数字nの正方形がどのインデックスにあるかを素早く見つける方法があるのだろうかと思います。したがって、nが5の場合、配列内に25がどこにあるかを探しています。今、私は現在のインデックスに追加する((n)*(n - 1))を持っています。何か速いですか?オッズの連続配列で数値の2乗を求める
あなたの配列は、連続した数字で作られており、それがインデックスi
で、我々はa[i]=i+3
のでi=a[i]-3
を持っているので、それは、3と違い1と第一の要素で数学的計算の進行をなすこのため、並べ替えています。
nsqr
が
n*n
なりましょう
n
の広場のインデックスを見つけるために、nsqrインデックスは単に
nsqr-3
あり、それは
O(1)
アルゴリズムです。
我々はa0
で開始し、我々は(nsqr-a0)/d
を行うn
の二乗がどこにあるかを見つけるために、d
によって異なる連続でソートされた数字を持っている時はいつでも、それが一般的なようにします。
O(log n)の複雑さ – bigbounty
は、配列がオッズの配列ではなく、ちょうど奇数で始まるバイナリ検索アルゴリズムを使用します。とにかく配列は常に連続した数字から構築されますか?それが常にソートされていない場合は? – niceman
@niceman常に連続した数字から構築され、常に昇順にソートされます – user7252850