python - 更快的算法来定制给定的数学表达式

标签 python python-3.x algorithm math mathematical-optimization

<分区>

是否有更优化的解决方案来解决所述问题?

给定一个包含“N”个元素的数组“arr”和一个数字“M”,找到满足方程式的最小索引“z”。 [ ] 被视为 floor()。

enter image description here

代码:

counts=0
ans=0
while(ans==0):
    s=0
    for i in range(counts,len(arr)):
        s+=int(arr[i]/(i+1-counts))
        if(s>M):
            break
    if((i+1)==len(arr) and s<=M):
        print(counts)
        ans=1
    counts+=1

解释:

  1. 从左到右检查数组。第一个满足条件的索引就是答案。这比从右到左考虑更优化。

  2. 如果在计算过程中的任何时候,'s'被认为大于 M,则打破循环并考虑下一个。这比完全计算 's' 更优化。

示例:

输入:

N=3 M=3

arr=[1 2 3]

输出:

0

这将给出答案 0,因为第 0 个索引包含满足给定关系的第一个元素。

提前致谢。

最佳答案

如果您使用的是相对较小的数组,您的算法将足够快。可以通过稍微重组代码来实现微小的改进,但不会有太大的变化。

如果您使用的是非常大的数组,那么我建议您研究一下 numpy。它针对阵列范围的操作进行了优化,并具有令人印象深刻的性能。

例如,您可以在一次操作中将数组中的所有元素按其反转位置划分:

terms = arr / np.arange(len(arr),0,-1)

然后在单行中获取累计和和第一个索引

index = np.where(np.cumsum(terms) <= M)

关于python - 更快的算法来定制给定的数学表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54965682/

相关文章:

python - 如何输出 groupby 对象的 csv?

python - django-admin.py startproject 不工作

python - 如何匹配数据框中列之间的值

python - 带超时的异步子进程

python - 如何直接运行Python包的主脚本?

二维游戏算法

python - 如何将大数据集连接到数据框 pandas

python - 如何通过 python-telegram-bot 接收 file_id ?

python - 统一成本解决方案中的算法问题

c# - 如何降低这些 if else 语句的圈复杂度