2012-04-17 13 views
0

開始時刻と終了時刻の2つの変数を含む「スレッド」のリストがあると、ある時刻tに実行中のすべてのスレッドを返す関数を実装します。それを最適化する。 異なる間隔内の共通点を見つける


マイ溶液がリストを反復することであった(O(N)よりも速い) - (N)Oです。誰もがO(n)より速く達成する方法を知っていますか?

class MyThread{ 
Thread thread; 
long start; 
long end; 
}//the object in the list 

//function to find "threads" 
public List<Thread> matchingInterval(List<MyThread> list) { 
    List<Thread> found = new ArrayList<Thread>(); 
    Set<Thread> runningThreads = Thread.getAllStackTraces().keySet(); 
    long instant = System.currentTimeMillis(); 
    for(MyThread el: list) 
     if(el.start <= instant && el.end >= instant && runningThreads.contains(el.thread)) 
      found.add(el.thread); 
    return found; 
} 

EDIT:

目標は、私のソリューションは、time tは(プラス/マイナスのエラー)私の関数が呼び出され、それゆえ私のlong instant = System.currentTimeMillis();は、発信者は、いくつかの任意の指定していること、それは可能です時間であることを前提としていreturn all running threads at some time t.にあります時間?はいの場合、私はその質問がスレッドそのものとはまったく関係ないことを観察し、実際にはrunningThreadsを取得する必要はありません。

別のポイント:スレッドが生きているという理由だけで、実行中ですか?

+1

さて、スレッドが実行中かどうか、つまりO(n)を確認する必要があります。これが少し速くなる唯一の方法は、リストが開始時刻に従って事前ソートされている場合です。次に、開始時刻がちょうど 't'に等しいスレッドのバイナリサーチを実行できます。 – noMAD

+0

リストがソートされているとは言わなかった。 – kasavbere

+0

リストをあらかじめソートしておいて償却することを考えました:リストがあらかじめソートされているので、関数へのすべてのコールは事前ソートされたリストを見つけ、バイナリ検索を使用してO(2 * lg n) – kasavbere

答えて

1

リストがソートされている場合は、任意の検索アルゴリズム(分割や征服など)でO(n)より高速に処理できます。各項目を見なければならないので、ソートされていないリストのO(n)よりも速く達成することはできません。

+0

リストがソートされているとは何も言われませんでした。 – kasavbere

+0

@kasavbere誰がスレッドのリストを管理しているかについても言及していません。そのリストの入力方法にアクセスできる場合は、その機能を改善することができます。それ以外の場合、O(n) – Rado

+0

より速く取得する方法はありません。「スレッド」のリストには、リストを制御しないことが示唆されているようです。私がコントロールしていないクライアントオブジェクトの中には、APIコールを介して自分の関数を使わなければならない場合、O(n)よりも優れたものはありません。それ以外の場合、オブジェクトにリストのローカルコピーがある場合は、前述のように、事前ソートによるコストの償却は、私が見る限りです。試しに投票してください。 – kasavbere

0

「最適化」と言えば、リストオーダーの前処理が許可されています。将来のクエリを高速化します。その場合、私はinterval tree(実際にはバイナリ検索ツリーのアプリケーションです)を使用します。

+0

開始時刻と終了時刻の間に、スレッドは実行中と見なされますか?私はインターバルツリーの考え方を見ていますが、スレッドが生きているという理由だけで実行していますか? – kasavbere

+0

これは非常に単純な質問です。間隔とポイントのリストを与えられたら、どの間隔にポイントが含まれているか調べてください。 "とそれ以外のもの –

関連する問題