假设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
答案 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)