2016-08-24 78 views
0

使用計數器來暫停執行以顯示單獨的處理步驟,是否可行地通過douglas peucker行簡化算法? 我不確定是否有可能。如果是的話,建議使用特定的數據結構 來做到這一點。我只看到遞歸的解決方案,我不確定這是否可行?使用計數器的Douglas Peucker算法

回答

1

是的,這當然是可以的。如果您最感興趣的是查看算法完成後採取的步驟,那麼最簡單的方法就是在算法的每個步驟中保留點列表的副本。算法完成後,您可以打印出中間步驟列表。

例如,如果你在一個列表存儲點,那麼你可以在列表在每次迭代複製:

class DouglasPeucker { 
    private List<Point[]> steps = new ArrayList<>(); 

    public Point[] compute(Point[] points) { 
     steps.add(points.clone()); 
     // perform normal recursive steps 
    } 

    public void printSteps() { 
     for (Point[] points: steps) { 
      ... 
     } 
    } 
} 

注意,這是數組的一個淺表副本 - 即點對象不克隆。如果點對象是不可變的(這可能應該是這樣),這將工作正常。

或者,如果您想停止每個點並檢查變量的狀態,則應在適當的位置使用帶有斷點的交互式調試器。

+0

謝謝短跑運動員。它很高興知道這是可能的。在某些時候,我一直試圖保留一份輸出結果,我想我需要確保我在代碼中的正確位置上覆印。我的實現在返回的點被合併之前有兩個遞歸調用。我認爲我的問題是在遞歸調用之後,即在結果行數據合併後,我試圖獲取點數據的副本。遞歸之前的副本是否要調用方法 – daveb