-1

このタイプの問題に最適なデータ構造がわかりません。

私はサークルを持っています。異なる位置(角度)でカットすることができます。カット間のセグメントには色があります (たとえば、赤または黒)。カットがなければ、すべての円は 1 色になります。

どのような操作が必要ですか?

[1] セグメントの色を変更します。

[2] 角度をつけてカットを加える。

[3] 与えられた角度について、それがどのセグメントに属しているかを教えてください。

[4] 同じ色の連続するセグメントを結合します。

現在、端と色の角度を格納するセグメントのクラスがあります。そしてそれを操作するArrayList。

私が抱えている問題:

[1]ArrayList よりも高速なものが必要です。(TreeSet? 何か他のもの?)

[2]カット無しの円は特例として扱っております。(0 と 0 の 2 つのフェイク カット)

[3]角度が 0 のセグメントを特殊なケースとして扱っています。セグメント (7pi/8, pi/8) と (pi/8, 7pi/8) には、異なるアプローチと大量の if 条件が必要だとします。

4

1 に答える 1

4

Java でこれを行う慣用的な方法は、データ構造を使用するのではなく、独自のクラスを作成することです。例:SegmentedCircleクラス。必要な API を提供し、それを動作として実装します。おそらくSegmentorという名前の他のクラスに委譲しCut、これらのリストを持っている可能性があります。

通常は、最初に API を正しく/便利にしてから、次にパフォーマンスについて心配するのが安全な方法です (実際に必要な場合のみ)。つまり、事前に最適化しないでください。

より高速な追加と削除が必要だとおっしゃっていたので、その仕事に適したツールはHashSet. そのドキュメントから

このクラスは、基本的な操作 (追加、削除、包含、およびサイズ) に対して一定時間のパフォーマンスを提供します。

equals注: これが正しく機能するためには、クラスにhashcode正しく 実装する必要があります。

于 2013-06-03T18:21:29.867 に答える