2017-10-04 8 views
0

私には以下のスニペットがあります。 printTop効率的な挿入と参照を解決するための最適化された方法

public void addTrade(String instrument, int volume) 
public void printTop(int count) 

引数は、それらの多く重く上場銘柄を印刷意味:私は2つのメソッドのシグネチャは以下の通りですaddTradeprintTop

public static void main(String args[]) throws Exception { 
     MostTraded mt = new MostTraded(); 
     mt.addTrade("IBM", 1000); 
     mt.addTrade("AAPL", 500); 
     mt.addTrade("NFLX", 600); 
     mt.addTrade("AAPL", 900); 

     mt.printTop(2); // AAPL 1400, IBM 1000 
    } 

を実装する必要があります。例えば、printTop(2)は、上位2の取引された株を意味する。追加は効率的でなければならず、在庫が複数回取引され、その場合にはvolumeを更新する必要があります。

私はそれを解決するために考えられたが、より良い方法があるかどうかわからない次ています。

のルックアップの値の効率的な追加を実施し、株式のために追加するには、私はprintTopを行うには<stockname, volume> でシンプルなHashMapを使用することができ、私は、そのキーvolumeであり、値が追跡するSet<String>あるTreeMapを使用することができます。 明らかに、私がしてaddTradeの場合、私はTreeMapの項目も変更する必要があります。

同じ問題を解決するための良い方法はありますか?

+0

ベスト・アンサーは、ソリューションの使用方法に依存します。私は、もしAddsがprintTopsの間に何千回も起こるとしたら、printTopsの間にいくつかのAddsがある場合と比べて最良の解決策が異なるだろうと思います。 – hatchet

+0

@hatchet、あなたは正しいことを前提としていますが、追加はprintTopよりも頻繁に行われます。それにはいくらかの遅さが許容されます。あなたの前提を守ることは、より理想的な解決策は何でしょうか? – curiousengineer

+0

特に、異なるテロップの数がPrintTop呼び出しの間に発生すると予想されるAddsの数よりも少ない場合や、通常は必要な上位項目の数が少ない場合、需要に応じて部分的にソートする方が安くなるだろうと推測しています(PrintTopが呼び出されたとき)、DodgyCodeExceptionは順序付きコレクションを維持するよりもむしろ示唆しています。あなたはHashMapだけを維持します。 PrintTopを可能な限り最適なものにしたいだけで、Addsを介して配布されるメンテナンスコストについてはあまり気にしないなら、それは別の答えを示唆しています。 – hatchet

答えて

0

それはあなたが探しているどのくらいの最適化に依存します。リアルタイム取引アプリケーションを作成している場合は、できるだけ速くすることをお勧めします。文字列セットのTreeMapを維持することはあまり効率的ではありません。あなたはトップのKを見つけたいと思っています。したがって、partial sort algorithmが必要です。 C++には既に標準的な部分ソート方法があります。残念ながら、Javaはそうではありません。しかし、サードパーティのものをオンラインで見つけたり、自分で書き込んだりすることができます。

関連する問題