2016-12-18 54 views
1

Iは、2つの配列を有する:これを効率的に解決する方法は?

  • pos[n]

    1. score[n]が、ここで、n < = 10^5。 POS [i]は、[i]は< = 10^4

    が定義スコア:

    f(i,j) = abs(pos[i]-pos[j])*max(score[i],score[j]) 
    

    は、私はすべてのi,j秒間f(i,j)の合計を見つける必要があります。
    私はO(n^2)で解決できるアルゴリズムを持っていますが、私は最適化したいです。
    私は多くの時間を費やしましたが、できませんでした。

    何か助けていただければ幸いです。 最悪の場合のコード http://ideone.com/q4qSNh

  • +2

    コンテキストの改善のためにコードのスニペットを提供できますか? – ganjeii

    +2

    あなたの関数fは、iとjで対称です。すなわち、f(i、j)= f(j、i)ですので、単純な最適化は三角形のみを評価し、まだO(n^2)ですが、努力の半分です。 – Henry

    +0

    私はそれを考慮した – prem

    答えて

    0

    先ほど同様の質問があります。 hereを参照してください。

    @Gribouillisは、O(nlogn)の複雑さを持つ素敵なアルゴリズムを提供しました。このアルゴリズムは、ソートとバランスのとれたバイナリ検索ツリーを使用しています。完全回答はhereをご覧ください

    実装は練習問題として残っています。

    関連する問題