2013-08-14 2 views
1

누가 알아낼 수없는 교과서에서 문제를 일으켰습니다. 그것은 :알고리즘 - 간격을두고 주식을 사고 파는 최적의 방법

한 달 동안 (예 : 0...30) 모든 돈을 투자하도록 설정되어있는 주식 STOK가 있으며 월말에 주식을 보유 할 수 없다고 가정 해 봅시다. . m의 돈이 있습니다. 언제든지 d STOK의 가격은 p(d)이며 언제든지 주식을 사고 팔 수 있습니다. 그러나 하루에 얼마만큼의 주식을 사거나 팔 수 있는지에 대한 한도는 l(d)입니다 (구매 및 판매와 동일합니다). 원하는 경우 계산의 용이성을 위해 정수가 아닌 단위를 구입할 수 있습니다. 이러한 기능을 고려할 때 이익을 극대화하기 위해 구매 계획을 어떻게 계획합니까?

순진한 해결책 : 매일 다음과 같은 제약 조건 하에서 가능한 많은 재고를 구입하십시오 : 판매일 기준으로 모든 주식을 판매 할 수없는 경우 더 이상 구매하지 마십시오. 돈이 없다면 더 이상 구매하지 마십시오. 주식 매각을 시작해야하는 시점에 이르렀을 때 (이것은 주식 가격을 미리 알고 있기 때문에 알려짐) 매매 할 수있는만큼 많이 팔립니다. 그러나이 솔루션은 작동하지 않습니다. 왜냐하면 처음 5 일 동안 주가가 하락하면 처음 5 일 후에 주가가 오르는 이유는 무엇입니까?

이것은 동적 프로그래밍과 같은 냄새가 나지만 주식 가격이 단조롭지 않다는 사실은 어렵게 만듭니다. 브 루트 포스는 분명히 문제의 연속성을 고려할 때 분명합니다. 어떤 해결책?

+0

연속적입니까? 가격은 매일 안정적이므로 개별적입니다. 주식은 분리되어 있습니다. 돈은 분리되어 있습니다. 내가 오해하지 않는 한 이것의 어느 것도 연속적이지 않다. –

+0

@ G.Bach 죄송 합니다만, 원하는 경우 계산의 용이성을 위해 주식의 비 개별 단위를 구입할 수 있다고 가정합니다 (그러나 쓰는 것을 잊었습니다). 나는 그것을 넣을 것이다. – jclancy

답변

1

주가를 미리 알고 있다면 재귀 (무차별 대입)에서 문제가되는 것처럼 들립니다. 일일 주가, 일일 한도, 일일 현금 및 소유 일일 배열을 구성합니다. 이러한 각 배열을 인수로 받아들이는 재귀 함수를 사용하십시오. 표시되지 않은 가능한 일 쌍 중 하나를 선택하고 매수와 매도를 표시하고 모든 배열을 업데이트하고 적절한 한도를 적용하고 재발행합니다. 월말 현금이 시작 현금보다 큰 경우 배열을 새로운 max로 저장하고, 배열을 시작점으로 재설정하고, 다음 일 쌍을 선택하고 모두 시도 할 때까지 계속하십시오.

관련 문제