algorithm - 优先队列,其中值是两种货币的总和,popMin 采用汇率

标签 algorithm data-structures priority-queue kdtree

我想定义一个优先级队列,其中优先级具有两种不同货币的组件。例如,商品 A 的价格为 1 美元 + 20 日元。这个队列有两个方法,insert(priceInUsd, priceInYen)popMin(exchangeRate),它以日元为单位的美元价格,弹出最低的项目根据此汇率,以美元和日元计的总成本。我该如何实现?

到目前为止,这是我的想法:

  • 使用 k-d 树。插入需要 log(n)。我认为您可以通过对普通的 k-d 树最近邻算法进行微小修改来实现 findMin,因此据称这应该花费 log(n) 时间。维基百科对 k-d 树最近邻是否真的是 log(n) 如果你有糟糕的数据最坏的情况持谨慎态度,所以我不确定这一点。此外,我从未见过看起来特别可靠的消息来源声称 kd 树允许 log(n) 插入。
  • 维护点的凸包,当你想得到最小值时,循环遍历其中的所有内容。最坏情况 n,但如果通常只有 n**(1/3) 东西在你的凸包中,这平均来说没问题。

最佳答案

dynamic planar convex hull 上有一些您没有提到的现有技术问题。 Brodal and Jacob (FOCS '02) 给出了一个数据结构,可以让你在一个方向上插入一个点,删除一个点,并在摊销的对数时间内找到一个方向的极值点,这足以实现你的数据结构(尽管实现看起来很复杂)。

关于algorithm - 优先队列,其中值是两种货币的总和,popMin 采用汇率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37650142/

相关文章:

algorithm - Earley 无法处理图表中已包含的 epsilon 状态

algorithm - 遍历对象 2 值以查找它是否与对象 1 最小变量匹配

java - 在java中实现链表时遇到问题

algorithm - 二叉堆和二叉堆有什么区别?

Java - PriorityQueue 与排序的 LinkedList

java - 删除函数如何处理包含字符串值的最小优先级队列?

algorithm - 大文本文件中的相关文本搜索

python - numpy 中 1d 到 3d 索引对应的有效算法

algorithm - 以尽可能少的比较对元素进行排序

c - 链表插入