R中的优先级队列用于OPTICS实现

时间:2012-05-29 12:15:52

标签: r cluster-analysis priority-queue optics-algorithm

我需要在R中构建一个优先级队列,我将为OPTICS聚类算法放置有序种子对象(或对象的索引)。

  • 一种可能性是使用具有数组表示的堆实现它,并在每个插入中传递堆数组并减少键调用,并返回更改的数组并在调用函数中重新分配它。在这种情况下,重新分配操作将使性能非常差,并且每次执行一次插入或减少操作时,整个阵列需要被复制两次,一次用于调用,另一次用于返回和重新分配。

  • 另一种可能性是在函数内部编写堆操作而不是调用它。这将导致代码重复和繁琐的代码。

  • 是否有像我们在C

  • 中所做的任何指针访问
  • 我可以在R中的S3或S4类中声明用户定义的函数吗?在这种情况下,我认为对这些函数的调用在返回后仍然需要相同的重新分配(不像C ++ / Java类,对对象进行操作(我是对吗?)

  • 是否有任何内置方法可以在O(log(n))时间内在R中插入和提取队列中的对象?

  • 我是否可以通过其他方式实现目标,即根据OPTICS算法中对象的可达性距离保持基于优先级的插入和删除种子,除非在每次插入后明确排序

2 个答案:

答案 0 :(得分:1)

R5 classes 定义可变对象,与Java类非常相似: 它们应该允许您在修改对象时避免使用副本。

答案 1 :(得分:1)

请注意,您不仅需要优先级队列。

它实际上也需要支持有效的更新。简单的堆是不够的,您需要同步哈希映射以有效地查找对象以更新其值。然后,您需要在更改的位置修复堆。