Python 给定n个函数yi(x)=a0+;a1x和x2B;a2x2和x2B;a3x3和q查询

Python 给定n个函数yi(x)=a0+;a1x和x2B;a2x2和x2B;a3x3和q查询,python,algorithm,python-3.x,numpy,mathematical-optimization,Python,Algorithm,Python 3.x,Numpy,Mathematical Optimization,给定n个函数yi(x)=a0+a1x+a2x2+a3x3和q查询。对于每个查询,我们都会得到一个整数t,我们需要找出使yi(t)最小化的yi supoose我们有一个列表,其中包含n个函数[[10,5,4,8],[2,0,5,0],[1,8,0,2],[8,7,8,7],[7,0,8,1]]的a0,a1,a2和a3的值,对于不同的t值,我们必须找到t值最小的函数。例如t=1函数[2,0,5,0]我尝试了蛮力方法,但是对于n的大值和t的大值,脚本执行起来太慢了 lis= [[10, 5, 4, 8

给定n个函数yi(x)=a0+a1x+a2x2+a3x3和q查询。对于每个查询,我们都会得到一个整数t,我们需要找出使yi(t)最小化的yi

supoose我们有一个列表,其中包含n个函数[[10,5,4,8],[2,0,5,0],[1,8,0,2],[8,7,8,7],[7,0,8,1]]的a0,a1,a2和a3的值,对于不同的t值,我们必须找到t值最小的函数。例如t=1函数[2,0,5,0]我尝试了蛮力方法,但是对于n的大值和t的大值,脚本执行起来太慢了

lis= [[10, 5, 4, 8],[2, 0 ,5, 0],[1, 8, 0, 2],[8, 7, 8, 7],[7, 0, 8, 1]]
t=[1,3,5,7,9]
size=len(lis)
for j in t:
    matrix=[]
    for i in range(size):
        matrix.append(lis[i][0] + j*((lis[i][1]) + j*((lis[i][2]) + (lis[i][3]*j))))

    print(min(matrix))  

输出:
7 47 127 247 407

我没有完整的答案,但可能有一些想法可以加快速度

现在还不完全清楚大量的三次多项式是从哪里来的,但是如果它们不是完全随机的,就有可能减少集合

例如,如果我有一个函数f(x)=ax^3+bx^2+cx+d,另一个函数g(x)=ax^3+bx^2+cx+(d+e),且e>0,那么可以从集合中删除g(x),因为g(x)=f(x)+e,因此总是大于f(x)

二次项可以做类似的事情。如果你发现一个g(x)=f(x)+ex^2,当e>0时,可以消除g(x),因为二次项大于或等于零

由于对多项式数组进行排序的复杂度为O(n logn),因此排序不会有任何影响(我们处理的复杂度为O(nm),n=多项式的数量,m=输入的数量)。 扫描阵列的复杂度为O(n),也不会造成任何伤害

立方体前面具有大正系数的多项式将是大负输入的有希望的候选多项式,反之亦然。
只要多项式是相似的,这个想法就可以用来减少搜索。

什么意思?时间太长了?@UpmostScarab是的,首先你犯了个错误。您应该为循环使用不同的变量。接下来,我建议您使用
numpy.min
而不是
min
来表示lis中的j
而不是
表示范围(大小)中的j
@UpmostScarab是的,这是一个键入错误。我刚刚更改了变量名。@UpmostScarab numpy.min对于大N和大长度的t没有多大区别