将0到1之间的实数转换为索引的最佳算法

时间:2018-03-14 15:41:52

标签: python python-3.x algorithm

假设x是0到1之间的实数

如果n = 2,则有两个分数范围0到0.5和0.5到1

如果n = 3,则有三个分数范围0到0.33,0.33到0.66和0.66到1

我想知道最有效的算法,它可以告诉x属于哪个分数。

如果x = 0.2且n = 3,则x属于第一个分数,因此index为0

如果x = 0.4且n = 3,则x属于第二个分数,因此index为1

这里是具有O(N)复杂度的python 3代码。

def index(x, n):
  for i in range(0, n):
    if i/n <= x and x <= (i + 1)/n:
      return i

我想知道是否有更好的算法可能会有恒定的时间?

编辑:我之前没有明确说过,但0和1都是x的合法值,当x = 1时结果应为n - 1

3 个答案:

答案 0 :(得分:8)

只需将两个数字相乘并剪切小数位:

def index(x, n):
    return int(x*n)

复杂性是O(1)

答案 1 :(得分:1)

我只想做以下事情:

def index(x,n):
    return (10*x // n)

答案 2 :(得分:0)

只需这样做:

import math

def index(x, n):
    return math.ceil(x*n)