【问题标题】:Sort unbound values onto a bound scale?将未绑定的值排序到绑定的范围内?
【发布时间】:2011-07-18 22:23:39
【问题描述】:

我有一组未绑定的值存储在一个数组中(如果有帮助,它是一个NSArray)。值的范围从 0 到无穷大(实际上最大值约为 100,000,000)。

我需要将数组中的值排序为 0 到 20

例如,如果我有一组1000, 3123, 3131 将是 01000 将是 10 和 3123 将是 20。数组的成员数量和最大值各不相同,所以我知道如果有很多不同范围的值,其中很多值会在比例尺上占据相同的位置。 大多数情况下,项目数将超过 20 个(平均项目数约为 100 个)。

当项目数超过 20 时,部分项目应该具有相同的评分。

我需要它来直观地表示每个搜索查询的歌曲流行度,其中这些值是歌曲在全局图表上的位置的全局表示。

有可能创建这样的算法吗?

【问题讨论】:

标签: c algorithm math nsarray


【解决方案1】:

如果我理解正确,您只想对值进行升序排序并将它们映射到 0 到 20 的范围内?因此,您可以只计算您有多少个值(例如 11),将您的范围除以这个数字 - 1(例如 20/(11 - 1) = 2)并为每个值分配适当的数字(例如 0、2、4、 6、8...)

【讨论】:

  • 然后你会得到低于 1(但总是高于 0)的差异,比如 0、0.3、0.6、0.9、1.2...
【解决方案2】:

对数组进行排序。现在将每个项目的索引乘以 (20 / ([myArray count] - 1));请注意,计数必须 > 1。我猜您的商品不会超过 20 件?

【讨论】:

    【解决方案3】:

    百分比计算对您有帮助吗? 即使用最大值作为 100%(即 20),其余的映射为最大值的百分比。 对于你的前任:

    [ 1000 3123 31 ]
    (31/3123)*20 = 2
    (1000/3123)*20 = 6 (or 7)
    (3123/3123)*20 = 20
    

    这样,最终值(在 0-20 范围内)仍然具有初始集合中的数字分布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 2013-09-09
      • 2015-05-14
      • 2014-10-28
      • 2018-01-28
      相关资源
      最近更新 更多