智能算法在两个值之间创建唯一的指数序列步骤

时间:2018-01-30 18:33:57

标签: ruby-on-rails algorithm

我正在寻找一种算法,该算法在两个给定的动态值之间返回5步,包括两个起始值,指数增长。返回的值应该很好地舍入并且是唯一的。

实施例: 范围 100 - 10000 应该返回如下内容:

100, 500, 2500, 5000, 10000

这是我到目前为止所提出的(信用主要归功于我曾经发现但无法恢复的SO线程):

min = 100
max = 10000
a = Array.new
loops = 5
factor = 2.5

for i in 0..loops-1
  x = (max - min) * ( (i.to_f / (loops.to_f - 1.0)) ** factor ) + min
  case x
  when min
    a[i] = x.to_i
  when max
    a[i] = x.to_i
  when (min + 1).to_f..500
    a[i] = (x.to_f / 250).round(0) * 250
  when 500..2000
    a[i] = (x.to_f / 500).round(0) * 500
  else
    a[i] = (x.to_f / 2500).round(0) * 2500
  end
end

结果可以调整因子,我发现2.5是最好的。在大多数情况下,这种方法效果很好。在四舍五入之前,我得到了这些值:

[100.0, 409.37, 1850.08, 4922.67, 10000.0]

但它没有检查在舍入过程中可能发生的重复,这种情况主要发生在范围较小的情况下:

100 - 1000
Raw: [100.0, 128.12, 259.09, 538.42, 1000.0]
Rounded: [100, 250, 250, 500, 1000]
5000 - 10000
Raw: [5000.0, 5156.25,5883.88, 7435.69, 10000.0]
Rounded: [5000, 5000, 5000, 7500, 10000]

现在我在丢弃整个代码和尝试提出一种更智能的计算方法之间有点不知所措,该计算方法已包括舍入或仅在第二次运行时检查重复项 - 但我没有得到任何令人满意的结果这两个选项。

是否有人知道如何在舍入中集成重复检查或使舍入更加动态?

0 个答案:

没有答案