我需要在R中构建一个优先级队列,我将为OPTICS聚类算法放置有序种子对象(或对象的索引)。
一种可能性是使用具有数组表示的堆实现它,并在每个插入中传递堆数组并减少键调用,并返回更改的数组并在调用函数中重新分配它。在这种情况下,重新分配操作将使性能非常差,并且每次执行一次插入或减少操作时,整个阵列需要被复制两次,一次用于调用,另一次用于返回和重新分配。
另一种可能性是在函数内部编写堆操作而不是调用它。这将导致代码重复和繁琐的代码。
是否有像我们在C
我可以在R中的S3或S4类中声明用户定义的函数吗?在这种情况下,我认为对这些函数的调用在返回后仍然需要相同的重新分配(不像C ++ / Java类,对对象进行操作(我是对吗?)
是否有任何内置方法可以在O(log(n))
时间内在R中插入和提取队列中的对象?
我是否可以通过其他方式实现目标,即根据OPTICS算法中对象的可达性距离保持基于优先级的插入和删除种子,除非在每次插入后明确排序
答案 0 :(得分:1)
R5 classes 定义可变对象,与Java类非常相似: 它们应该允许您在修改对象时避免使用副本。
答案 1 :(得分:1)
请注意,您不仅需要优先级队列。
它实际上也需要支持有效的更新。简单的堆是不够的,您需要同步哈希映射以有效地查找对象以更新其值。然后,您需要在更改的位置修复堆。