这个算法没有考虑买入和卖出的天数的合理性,买入和天数必须要比卖出的天数少啊,这是常识啊,你在今天买入,难道还能在昨天卖出吗。所以卖出的数字必须要大于买入的天数。否则就会像你说的结果不对
一种天真的方法是 - 实现两种算法并在计算机上运行两个程序以获得不同的输入,看看哪个花费更少的时间。这种方法在算法分析中存在许多问题。
渐进分析是在分析算法时处理上述问题的大思想。在渐近分析中,我们根据输入大小评估算法的性能(我们不测量实际运行时间)。我们计算算法所花费的时间(或空间)如何随着输入大小的增加而增加。
例如,让我们考虑排序数组中的搜索问题(搜索给定项目)。
上述搜索问题的解决方案包括:
为了理解渐近分析如何解决上述分析算法中提到的问题,
输入大小 | 在 A 上的运行时间 | B 上的运行时间 |
---|---|---|
10 | 2 秒 | ~ 1 小时 |
100 | 20 秒 | ~ 1.8小时 |
10^6 | ~ 55.5 小时 | ~ 5.5小时 |
10^9 | ~ 6.3 年 | ~ 8.3小时 |
此示例的运行时间:
我很抱歉,看到您的问题描述和参考资料,发现并没有提到关于购买股票的最优算法遇到的具体问题和输入情况。因此,我无法提供解决方案。如果您还需要关于该问题的帮助,请提供更具体的信息和输入,我将竭尽所能提供帮助。
应该是因为寻找最佳卖出日期的地方有错误,可以在找到最低价格后,再从此位置往后判断在哪一天价格最高的卖出时间,循环结束即可找出最佳的出售日期。
修改如下:
#s=[1,1,0,0,0,1]
s=[10,4,8,7,9,6,2,5,3]
#s=[1,1,1]
N=0
min_price=s[0]
max_profit=0
buy_day=0
sell_day=0
for N in range(len(s)):
# 找到一个更低的价格时,往后计算哪一天卖出的价格最高
if (s[N]<min_price):
min_price=s[N]
#print("min_price=",min_price,",N=",N)
# 遍历此天之后,哪一天为价格最高的卖出日期
for sd in range(N+1,len(s)):
# 如果当前天卖出价格更高,则将当前天设置为最佳卖出日期
# 同时记录最高卖出价格
if((s[sd]-min_price)>max_profit):
buy_day=N
max_profit=s[sd]-min_price
sell_day=sd
# print("max_profit=",max_profit,",sd=",sd)
else:
profit = s[N]-min_price
if profit > max_profit:
max_profit=profit
sell_day = N
print(f"在第{buy_day+1}天买入,第{sell_day+1}天卖出,利润为:{max_profit}")