我有一种分段函数f(p,q,x),它由列表q和p确定。
例如,以下表示当x在[0,3]之间时f为100,而当x在(3,5)之间时为f
p q
100 3
95 2
90 6
我的问题是找到满足f(pa,qa,x)<的最大x。 p(pb,qb,x),给定参数pa,qa,pb,qb(pa按升序排序,pb按降序排序)。
我可以想到一个像下面这样天真的解决方案。
def f(p,q,x):
y=0
for i in range(len(p)):
y+=q[i]
if y>=x:
return p[i]
return p[len(p)-1]
pa=[92,94,104]
qa=[4,2,3]
pb=[100,95,90]
qb=[3,2,6]
x=0
for i in range(min(sum(qa),sum(qb))):
if f(pa,qa,i)<f(pb,qb,i):
x=i
else:
break
print(x)
但这个解决方案有两个问题
*它不适用于浮点输入
*效率低下,当列表很大时可能会出现性能问题
谁能指出我一个优雅的解决方案,避免上述问题?
顺便说一下,我知道这可以在纸浆或scipy linprog中轻松解决,但更愿意使用专门的算法。
非常感谢,
Acquila