【发布时间】:2019-02-13 09:18:58
【问题描述】:
我有两个列表L 和C,都从小到大排序。 L 包含正整数,C 包含正整数和正小数 (e.g. 0.01,0.05,..,100)。 C 的长度固定为6000+,L 的长度是可变的(between 2 and 3000)。
目标是:给定一些常量M,从L 中找到l,从C s.t. 中找到c。 l*c<=M 并尽可能接近M。
目前我正在使用 for 循环 C 和对列表 L 的二进制搜索来找出最大的 l*c 即 <=M。但是它非常慢。
candidate_list = []
for c in C:
binary search on list L using while loop to find out the best l*c<=M
candidate_list.append(best l*c)
print(max(candidate_list))
给定L 的长度为N,使用二分查找将采用logN。但是,由于C 的长度是6000+,所以c 的for 循环会很慢。如果我有多个不同长度的列表L,使用 for 循环会很慢。请问有没有 numpy 或 scipy 包可以加快计算速度?
注意:由于我有很多列表L,我不能简单地在L 和C_transpose 之间进行numpy 矩阵乘法,并使用argmax 找出最大值l*c,即@987654356 @。
【问题讨论】:
标签: python python-3.x algorithm data-structures