python 주식 매매 의 가장 좋 은 시기(욕심/만력 알고리즘 기반)

leetcode 알고리즘 문 제 를 풀기 시 작 했 습 니 다.오늘 은'주식 을 매매 하기에 가장 좋 은 시기'입 니 다.
제목 요구
배열 을 지정 합 니 다.그 i 번 째 요 소 는 주어진 주식 의 i 일 째 가격 입 니 다.
당신 이 얻 을 수 있 는 최대 이윤 을 계산 하기 위해 알고리즘 을 설계 하 세 요.너 는 가능 한 한 더 많은 거래 를 완성 할 수 있다.
주의:당신 은 여러 가지 거래 에 동시에 참여 할 수 없습니다.
이 문 제 를 보 니 최초의 생각 은 만력 법 이 었 다.
2 층 순환 을 통 해 서로 다른 날 간 의 이윤 과 이윤 을 끊임없이 계산 하 다.
아래 위 코드

class Solution(object):
  def maxProfit(self, prices):
    """
    :type prices: List[int]
    :rtype: int
    """

    self.allbuy1 = []  #          (    )
    self.allbuy2 = []  #            (    )
               # allbuy1 allbuy2                    
    self.curbuy(prices,0,0) #prices      0:   0:
    #print(self.allbuy1)
    #print(self.allbuy2)
    return self.picBigest(self.allbuy2)
  def buyticket(self,prilist,a,b):    #list:        a:         b:       
    return prilist[b] -prilist[a]  #        

  def curbuy(self,plist,x,result): #plist:     x:        result:   
    obj=result           #                 
    lens=len(plist)        #  
    for i in range(x,lens-1):
      for j in range(i+1,lens):
        temp=self.buyticket(plist,i, j)
        self.allbuy1.append(temp)
        self.allbuy2.append(temp)   #        
        result = obj + temp   #             
        if(x>=2):       #      2+1              
          self.allbuy2.append(result) #          
        self.curbuy(plist,j+1,result)  #   j+1:       result:  

  def picBigest(self,reslist): 
    big=0
    for i in reslist:
      if (i>big):
        big=i
    print(big)
    return big

if __name__ == '__main__':
    test=Solution()
    prices = [5,7,3,8] #          
    test.maxProfit(prices)
분석:
이 코드 는 이해 하기 쉬 운 것 은 모든 가능성 을 배열 에 넣 고 가장 큰 가능성 을 찾 는 것 이다.
이 코드 를 제출 할 때 시간 제한 을 초과 한 것 을 표시 합 니 다.
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
생각 바 꾸 기:욕심 산법 으로 이 일 을 해결 합 니 다.
먼저 욕심 산법 을 소개 합 니 다.문 제 는 현재 상황 만 최 적 으로 처리 하고 그 후에 어떤 일이 발생 하 더 라 도 이전의 결정 에 변 하지 않 습 니 다.쉽게 말 하면 국부 적 으로 가장 잘 풀 리 는 과정 이다.
거스름돈 문제
액면가 가 5 원,2 원,1 원,5 각,2 각,1 각 인 화폐 가 있다 고 가정 하면 고객 에 게 4 원 6 각 의 현금 을 찾 아 주 고 지불 한 화폐의 수량 을 최소 화해 야 한다.
먼저 4 원 6 각 이하 의 최대 액면가(2 원)를 찾 아 라4.567917.그 다음 에 2 원 6 각 이하 의 최대 액면가(2 원)를 찾 아 라이 어 6 각 이하 의 최대 액면가(5 각)를 찾 아 냈 다.
4.567917.마지막 으로 1 각 이하 의 최대 액면가(1 각)를 찾 아 4 장의 지 폐 를 지불한다.
욕심 산법 을 소개 하고 간단 한 사상 을 이용 하여 대응 문 제 를 해결 하 다.
주식 가격 동향 을 이미 알 고 있 는 상황 에서 다음 날 만 판단 해 야 한다.
그럼요.제 가 안 팔 고 며칠 있다 가 팔 거나 안 사 거나 며칠 있다 가 살 수 있 는 방식 으로 성장 을 유지 할 수 있다 는 의견 이 있 을 거 예요.

다음날 3 일 매입 하고 4 일 매도 하고 5 일 매입 하면 A+B
다음 날 5 일 매입 하면 매출 수익 은 C.
분명히 A+B 가 C 보다 크 기 때문에 욕심 법 은 이런 상황 에서 매우 적용 되 고 가장 좋 은 결 과 를 얻 을 수 있 을 것 이다.
직접 코드

class Solution(object):
  def maxProfit(self, prices):
    profit = 0
    for day in range(len(prices)-1):
      differ = prices[day+1] - prices[day]
      if differ > 0:
        profit += differ
    return profit
if __name__ == '__main__':
    test=Solution()
    prices = [5,7,3,9] #          
    print(test.maxProfit(prices))
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기