3

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

  • 一种可能性是用数组表示的堆来实现它,并在每个插入和减少键调用中传递堆数组,并返回更改后的数组并在调用函数中重新分配它。在这种情况下,重新分配操作会使性能变得很差,每次执行一次插入或减少操作时,整个数组都需要复制两次,一次用于调用,另一次用于返回和重新分配。

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

  • 有没有像我们一样访问的指针C

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

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

  • 有没有其他方法可以实现目标,即根据 OPTICS 算法中对象的可达距离保持基于优先级的种子插入和移除,除了在每次插入后显式排序。

4

2 回答 2

1

R5 类 定义了可变对象,与 Java 类非常相似:它们应该允许您在修改对象时避免复制。

于 2012-05-29T21:36:17.767 回答
1

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

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

于 2012-05-30T16:15:07.770 回答