繁体   English   中英

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

[英]Best algorithm for converting real number between 0 and 1 to index

假设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

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

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

复杂性是O(1)

我只想做以下事情:

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

只需这样做:

import math

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM