【问题标题】:What is a performant algorithm for implementing APL grade up?什么是实现 APL 升级的高性能算法?
【发布时间】:2021-12-24 06:45:03
【问题描述】:

对于 APLers:我只关心 monadic 对向量的升级。

对于非 APLers:Grade up 是一个函数,它接受一个大小为 n 的数字向量 V 并返回一个整数向量 R大小相等。 V的最小元素的索引放在R[0],R[1]的下一个最小元素的索引, ...,R[n-1]中V的最大元素。 V的值必须不变。

分级显然与排序有关:R 提供到 V 的索引,以便按排序顺序访问 V。升级必须是稳定的:即如果 V 的两个元素具有索引 i,j 其中 i j 相等,则 i, j 将按顺序连续出现在 R 中。 O(n^2) 实现很容易,但我不明白如何适应标准的稳定 O(n log n)为此目的排序实现。只使用常数空间的算法是可取的。

【问题讨论】:

标签: algorithm sorting apl


【解决方案1】:

对于这个特定任务,您可以使用任何就地排序算法:用从 0 到 n-1 的索引填充 R,然后对其进行排序。

对于排序,不是按值比较两个索引 ij,而是比较 V[i]V [j]。如果它们相等,然后通过比较 ij 来打破平局。

由于没有两个索引会比较相等,即使是像快速排序这样不稳定的算法也会产生稳定的结果。许多语言都包含一个默认排序,该排序将比较函数作为输入。

【讨论】:

  • 你是对的,我完全忘记了你可以比较索引来使排序稳定。
猜你喜欢
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 2019-06-22
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多