數組我有以下兩類排序折線
public class PointClass
{
double x, y, z;
}
和
public class PolyLineClass
{
PointClass startPoint;
PointClass endPoint;
}
和PolyLineClasses
polyLineArray[];
數組假設,如果我們連接中的所有行polyLineArray以某種順序,我們得到一個封閉的非自相關曲線。
例如
startPt endPt
polyLineArray[0]: (0,0,0) (1,0,0)
polyLineArray[1]: (0,1,0) (0,0,0)
polyLineArray[2]: (1,1,0) (0,1,0)
polyLineArray[3]: (1,0,0) (1,1,0)
如果我們通過在0-> 3-> 2-> 1個的順序陣列遍歷,我們創建了一個閉合曲線(在這個簡單的例子中,正方形)。 現在,我有如下算法:
1) int i = 0;
2) Get the endPt of polyLineArray[i];
3) search through the array for an element with index j such that
polyLineArray[i].endPoint == polyLineArray[j].startPoint.
4) i = j; Repeat from step2 until all elements in the array have been visited.
上述算法是O(嚇人)。有沒有更有效的方法來進行分類? 如果語言無關緊要,我在c#中編寫代碼。
在x,y,z附近使用地址變量,這樣x,y,z,addr指向下一個polypoint,那麼這將是O(n),或者您可以將它們預先分類到另一個數組中,然後使用該排序數組所以你不必每次都排序(這是O(1)) – 2013-05-14 17:26:04
這聽起來像你正在尋找凸包問題。搜索谷歌/維基百科應該給你一些關於使用一般算法的很好的信息。 – Servy 2013-05-14 17:40:12
@huseyintugrulbuyukisik您能詳細解答一個答案嗎?我對你評論的意思感到困惑。 – Calpis 2013-05-14 17:41:42