当前位置: 首页 > 知识库问答 >
问题:

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

韩寂离
2023-03-14

我需要在R中构造一个优先级队列,我将把有序的种子对象(或对象的索引)放在这里,用于光学聚类算法。

>

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

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

    有没有像我们在C中那样的访问指针

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

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

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

  • 共有2个答案

    长孙章横
    2023-03-14

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

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

    慕永年
    2023-03-14

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

     类似资料:
    • 我正在编写一个涉及堆实现的代码,在我的bubbleUp方法中,在我的while循环行中,我似乎遇到了一个取消引用的错误。这可能是一个相当基本的问题,但解决这个问题的最佳方法是什么?我在实现removeHigh方法时也遇到了一些问题,该方法旨在从队列中移除最高的元素。

    • 我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。

    • 非常感谢您抽出时间!

    • 我试图实现Dijkstra算法的一个版本,以找到公共汽车从起点到终点的最短路线。不幸的是,我似乎找不到swift提供优先级队列类型的库或其他方式,所以我似乎必须自己编写代码。 话虽如此,有人能指出我做这件事的正确方向吗? 目前我的想法如下: 到目前为止这是我的代码。似乎太短太残忍了...我一定是在概念上漏掉了什么。

    • 1)insert(name,priority):这个函数应该取一个string类型的名称和一个integer类型的优先级,并将它们插入到优先级队列中。remove():这个函数应该移除具有最高优先级值的对象,并从对象中返回名称字符串。 2)作为背景,我有三个类用于这个程序:第一,包含读取文件和使用函数的实现的“main”类。第二,“name”类,它创建包含名称字符串和优先级int的name对象、一

    • 问题 怎样实现一个按优先级排序的队列? 并且在这个队列上面每次 pop 操作总是返回优先级最高的那个元素 解决方案 下面的类利用 heapq 模块实现了一个简单的优先级队列: import heapq class PriorityQueue: def __init__(self): self._queue = [] self._index = 0