Advertisement
Abhisek92

stock_trade.py

Apr 21st, 2025 (edited)
529
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.17 KB | None | 0 0
  1. import numpy as np
  2.  
  3.  
  4. def k_best_trades(b, s, k):
  5.     n = len(b)
  6.     dp = np.zeros(shape=(k+1, n))
  7.     buy_idx = np.full(shape=(k+1, n), fill_value=-1)
  8.     best = np.full(shape=(k+1,), fill_value=np.inf)
  9.     best_buy_idx = np.full(shape=(k+1,), fill_value=-1)
  10.  
  11.     for t in np.arange(1, k+1):
  12.         best[t] = -b[0]
  13.         best_buy_idx[t] = 0
  14.  
  15.     for i in np.arange(1, n):
  16.         for t in np.arange(1, k+1):
  17.             dp[t][i] = dp[t][i-1]
  18.  
  19.             cand = s[i] + best[t]
  20.             if cand > dp[t][i]:
  21.                 dp[t][i] = cand
  22.                 buy_idx[t][i] = best_buy_idx[t]
  23.  
  24.             tmp = dp[t-1][i] - b[i]
  25.             if tmp > best[t]:
  26.                 best[t] = tmp
  27.                 best_buy_idx[t] = i
  28.  
  29.     t, i, trades = k, n-1, list()
  30.     while t and i:
  31.         if dp[t][i] == dp[t][i-1]:
  32.             i -= 1
  33.         else:
  34.             sell = i
  35.             buy  = buy_idx[t][i]
  36.             trades.append((buy, sell))
  37.             i = buy - 1
  38.             t -= 1
  39.  
  40.     trades.reverse()
  41.     return dp[k][n-1], trades
  42.  
  43. b = [3,14,9,21,7,11,6,18,2,20,5,16]
  44. s = [24,25,17,8,24,13,22,1,15,19,19,12]
  45.  
  46. profit, pairs = k_best_trades(b, s, k=2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement