我需要在R中構建一個優先級隊列,我將爲OPTICS聚類算法放置排序的種子對象(或對象的索引)。R中用於OPTICS的優先級隊列的實現
一種可能性是與該數組表示堆來實現它,並通過堆陣列中的每個插入物和減小鍵通話,並返回改變的陣列和在調用函數中重新分配它。在這種情況下,重新分配操作會使性能非常差,並且每次執行一次插入或減少操作時,需要將整個數組複製兩次,一次用於調用,另一次用於返回和重新分配。
另一種可能性是編寫函數內部的堆操作而不是調用它。這將導致代碼重複和繁瑣的代碼。
有沒有像訪問任何指針我們
C
做我可以在R中的S3或S4類聲明用戶定義的函數?在這種情況下,我認爲對這些函數的調用在返回後仍然需要相同的重新分配(不像C++/Java類,對對象進行操作(對不對)可以在R中插入並提取一個對象在
O(log(n))
時間的隊列中?是否有任何其他方式可以實現目標,即根據OPTICS算法中對象的可達性距離來維護基於優先級的插入和刪除種子,除了在每次插入之後進行顯式排序。
[R5 classes](https://github.com/hadley/devtools/wiki/R5)應該允許您在修改對象時避開副本。 –
您是否檢查過此討論:(http://www.mail-archive.com/[email protected]/msg108876.html) – nograpes
nograpes:隊列實現似乎對我沒有幫助。 Vincent Zoonekynd:看起來很有用,與C++/Java類更接近,需要詳細瞭解。 – phoxis