【问题标题】:Java Ordering a map or listJava 排序地图或列表
【发布时间】:2014-01-20 05:15:06
【问题描述】:

如果您的地图或列表中有一堆介于 -1 和 1 之间的双精度数,您可以从 -1 到 1 对它们进行排序。 它是多么完美,例如(0.4 在 0.3 之后但在 0.5 之前)

是否可以模拟将数字放在正确的位置但并不完美? 很难解释我的意思,但我已经绘制了一个图表来提供帮助。

x 是数轴上的点

我不希望它被完美排序,既不是随机排序,而是介于两者之间;大致排序。 如果可以,这可能吗?

【问题讨论】:

  • 直到您设法准确定义 roughly sorted 的意思之前,我会说这是不可能的。
  • 你想保留输入的顺序吗?
  • 听起来你想订购它们,但之后又把它们弄乱了一点,把它想象成 2 个步骤。对它们排序,然后取随机数的相邻值并交换它们。
  • @Keppil 这就是粗略排序没有定义的问题。把它想象成什么是 5/12?您知道 5/10 是 5,因此它小于 5,您可以将其近似为大约 0.4 ish。这就是我大致的意思。

标签: java list sorting map hashmap


【解决方案1】:

您可以使用 TreeMap(带有 Comparator-arg 的构造函数)或 Collections.sort(List, Comparator) 和基于 Double.compare(double, double)Comparator

这对于完美排序是正确的。关于“粗略排序”,您必须编写自己的比较器逻辑。并请定义您的术语您真正想要的排序方式。

【讨论】:

  • 我将解释它的用途,这可能会有所帮助:该程序会给出一个随机单词列表,这些单词会给出最适合的正面/负面评级。然后对其进行排序并选择顶部的 pos/neg 词,但是我不希望它每次都返回完美的词,也不是随机的,而是比平均更好的词。
  • 在@assylais 给它的链接中有en.wikipedia.org/wiki/Shell_sort 我可能会使用它并在X 周期后停止它,并使用您提供的内容来完成它。这是一个理论上的想法,我只是想看看这部分是否可行以及如何实现。
  • @user2871826 也许您可以对真实评分应用某种随机乘法,然后对这些模糊评分进行排序。例如:Math.max(0.0, Math.min(1.0, x + Math.random() * 0.1 - 0.05))
  • 模糊逻辑!为什么我之前没有想到这一点:\我只是想玩一下,看看什么效果更好。
【解决方案2】:

您尚未定义“粗略排序”,但一个选项是“分箱”。将区间拆分为 n 个宽度为 intervalsize/n 的 bin。将 bin 存储在数组或列表中,每个 bin 是一个值列表。在输入集上迭代一次并将值分配到相应的 bin,即 O(n)。您可以通过增加 bin 的数量来改进排序。

【讨论】:

    【解决方案3】:

    您可以先对它们进行排序,然后运行一组随机交换直接邻居。例如,列表大小为 n,您在随机位置交换 n 次。

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 2020-04-22
      • 1970-01-01
      相关资源
      最近更新 更多