2013-06-03 133 views
-1

圈我想不出什麼數據結構將是最適合這種類型的問題:到選擇什麼樣的數據結構,實現與削減

我有一個圓圈。它可以在不同的位置(角度)切割。切口之間的部分具有顏色(例如紅色或黑色)。如果沒有切割,所有的圓都有一種顏色。

我需要什麼操作?

[1]改變段的顏色。

[2]以某個角度添加切口。

[3]對於給定的角度來說明它屬於哪個段。

[4]連接相同顏色的連續段。

現在我有一個段存儲角度的兩端和顏色段。 和ArrayList來處理它。

的問題,我有:

[1]我想要的東西比ArrayList的速度更快。 (TreeSet?別的東西?)

[2]我正在治療沒有割傷的圓作爲特殊情況。 (在0和0處有兩個假切割)

[3]我正在處理包含0角的段作爲特例。說分段(7pi/8,pi/8)和(pi/8,7pi/8)需要不同的方法和大量的條件。

回答

4

在Java中這樣做的慣用方式不是使用數據結構,而是創建自己的類。 EG:a SegmentedCircle班。給它你希望它的API,然後將其實現爲行爲。它可能會委託給名爲SegmentCut的其他類,並可能包含這些列表。

首先讓您的API正確/方便,然後再擔心性能(並且僅在實際需要時),通常是安全的。換句話說,不要預先優化。

由於您告訴我需要更快速的添加和刪除,所以該作業的正確工具可能是HashSetFrom its documentation

這個類提供了固定的時間表現爲基本操作(添加,刪除,包含和大小)

注意:您需要確保您實現equalshashcode正確地在你的類這對財產工作。

+0

我有工作程序,它使用我自己的基於'ArrayList '的類,但是!我將它用於某些磁系統的蒙特卡洛模擬(並且所需的精度需要大量的迭代)。所以性能至關重要(內存使用不是)。 眼下探查說,最耗時的部分是: 「索引」功能,就是找到一些給定的角度屬於哪個段(我把段的順序和使用二進制搜索) 「添加」 - 在一個給定的加段位置。 「remove」 - 從ArrayList中刪除Segment。 – Vladimir

+0

@ user2276600看到我的編輯 –