gpt4 book ai didi

python - 散列一系列值

转载 作者:太空狗 更新时间:2023-10-29 18:18:50 25 4
gpt4 key购买 nike

我知道我可以将奇异值散列为 dict 中的键.例如,我可以散列 5作为 dict 中的键之一.

我目前面临一个问题,需要我对一系列值进行哈希处理。

基本上,我需要一种更快的方法来做到这一点:

if 0 <= x <= 0.1:
# f(A)
elif 0.1 <= x <= 0.2:
# f(B)
elif 0.2 <= x <= 0.3:
# f(C)
elif 0.3 <= x <= 0.4:
# f(D)
elif 0.4 <= x <= 0.5:
# f(E)
elif 0.5 <= x <= 0.6:
# f(F)

哪里x是一些float任意精度参数。

我能想到的最快的方法是散列,但问题是:我可以使用 (0.1, 0.2)作为一个关键,但这仍然会让我花费 O(n) 运行时间并且最终并不比 elif 的系列更好。 s(我将不得不遍历键并检查是否为 key[0] <= x <= key[1])。

有没有办法对一系列值进行哈希处理,以便我可以检查哈希表中的 0.15仍然得到 #execute B

如果这样的散列不可能实现,我还能如何改进它的运行时间?我正在处理足够大的数据集,线性运行时间不够快。

编辑:为了回应 cheeken 的回答,我必须指出,不能假定间隔是规则的。事实上,我几乎可以保证他们不是

为了回应评论中的请求,我应该提到我这样做是为了实现 fitness-based selection in a genetic algorithm .算法本身是作业,具体实现只是为了提高生成实验数据的运行时间。

最佳答案

正如其他人所指出的,您将为此获得的最佳算法是 O(log N),而不是 O(1),并且类似于通过排序列表进行二分搜索。

在 Python 中执行此操作的最简单方法是使用 bisect 标准模块,http://docs.python.org/library/bisect.html .请特别注意第 8.5.2 节中关于进行数字表查找的示例——这正是您正在做的:

>>> def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):
... i = bisect(breakpoints, score)
... return grades[i]
...
>>> [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]]
['F', 'A', 'C', 'C', 'B', 'A', 'A']

grades 字符串替换为函数列表,将 breakpoints 列表替换为您的下限阈值列表,然后就可以了。

关于python - 散列一系列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9043172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com