рд╕рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдпрд╣ рдЖрд▓реЗрдЦ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реЗ 5 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдбреЙрд▓рд░ / рд░реВрдмрд▓ рдХреА рд╡рд┐рдирд┐рдордп рджрд░ рдореЗрдВ рдЕрдВрддрд░ рд╕реЗ рдЖрдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХрдорд╛рдИ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд░реВрд╕реА рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдирд╛рдо рд▓рдЧрднрдЧ
рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рд╕рдмрд░реНрд░реЗ рддрддреНрд╡реЛрдВ рдХреЗ
рдЕрдзрд┐рдХрддрдо рдпреЛрдЧ рдХреА рддрд░рд╣ рд▓рдЧреЗрдЧрд╛ред рд▓реЗрдЦ рдЧрдгрдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЗрд╕рдХреЗ рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рднреА рд╣реИред

рдореИрдВ рдЗрд╕ рдкрд░ рдХреИрд╕реЗ рдЖрдпрд╛?
рдЙрдиреНрд╣реЛрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЙрддреНрдХреГрд╖реНрдЯ рд╕реАрдПрд▓рдЖрд░рдПрд╕ рдкреБрд╕реНрддрдХ (
рдереЙрдорд╕ рдПрдЪред рдХреЛрд░рдореЗрди, рдЪрд╛рд░реНрд▓реНрд╕ рдИред рд▓рд┐рд╕реЗрд░рд╕рди, рд░реЛрдирд╛рд▓реНрдб рдПрд▓ред рд░рд┐рд╡реЗрд╕реНрдЯ рдФрд░ рдХреНрд▓рд┐рдлреЛрд░реНрдб рд╕реНрдЯреАрди рдХреЛ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛
ред рдЕрд▓реНрдЧреЛрд░рд┐рджреНрдо, рдерд░реНрдб рдПрдбрд┐рд╢рди рдХрд╛ рдкрд░рд┐рдЪрдпред )ред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдкреБрд╕реНрддрдХ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдХреЗ рдореМрд▓рд┐рдХ рдЬреНрдЮрд╛рди рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддреА рд╣реИред
рдкреБрд╕реНрддрдХ рдХрд╛ рдПрдХ рднрд╛рдЧ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдЬреНрдЮрд╛рди рдХреЛ рдордЬрдмреВрдд рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣рд┐рдд рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ 5 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рд░реВрдмрд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рдбреЙрд▓рд░ рдХреА рд╡рд┐рдирд┐рдордп рджрд░ рдкрд░ рдбреЗрдЯрд╛ рдкрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░
рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ 5 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЧреНрд░рд╛рдл рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдбреЙрд▓рд░ рдмрд╣реБрдд рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдФрд░ рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ рдХрд┐ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕реМрджрд╛ рдПрдХ рдиреНрдпреВрдирддрдо рдиреНрдпреВрдирддрдо рдкрд░ рдЦрд░реАрджрдирд╛ рдФрд░ рдмрд╛рдж рдХреЗ рд╕реНрдерд╛рдиреАрдп рдЕрдзрд┐рдХрддрдо рдкрд░ рдмреЗрдЪрдирд╛ рд╣реЛрдЧрд╛ (рдЬреЛ рдХрднреА-рдХрднреА "рдЖрдВрдЦ рд╕реЗ" рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛)ред

рдЖрдЗрдП рдЗрд╕ рдХрдерди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред
рдирд┐рд░реНрдгрдп
рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди "рд╣реЗрдб-рдСрди рдЬрд╛рдирд╛" рд╣реЛрдЧрд╛ рдФрд░ рд╕рдмрд░реЗрдЬрд╝ рдХреЗ рд╕рднреА рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рдпреЛрдЧреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЦреЛрдЬреЗрдВ рдФрд░ рдЕрдзрд┐рдХрддрдо рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╛рдзрд╛рди рдУ (рдПрди ^ 2) рд╕рдордп рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд▓реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЕрдзрд┐рдХ рдЗрд╖реНрдЯрддрдоред
рд╕рдорд╛рдзрд╛рди рдХреЗ рджреНрд╡рд╛рд░рд╛, рд╣рдо рдЗрдирдкреБрдЯ рд╕рд░рдгреА рдХреЛ рдмреАрдЪ рдореЗрдВ рд╕реЗ 2 рд╕рдмрдЯреНрд░реЗрд╕реЗрд╕ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдФрд░ рднрд╛рдЧреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдпреЛрдЧ рдФрд░ рд╕рд╛рде рд╣реА рдЙрдирдХреЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдкрд░ рджреЗрдЦреЗрдВрдЧреЗред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП O (n lg n) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡реА рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
рд╣рдо рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ .csv рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
www.oanda.com/currency/historical-rates рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ
"2011-10-02","32.1914",,,,
"2011-10-01","32.0809",,,,
"2011-09-30","31.9086",,,,
"2011-09-29","31.7294",,,,
"2011-09-28","32.0421",,,,
"2011-09-27","32.2233",,,,
"2011-09-26","32.0980",,,,
"2011-09-25","32.0673",,,,
...
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдФрд░ рдЗрд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
courses = [] reader = csv.reader(open('data.csv', 'rb'), delimiter=',', quotechar='"') prev = 0 for row in reader:
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдордп рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЙрд▓рдЯрд╛ рдбрд╛рд▓реЗрдВред рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди, рд╣рдо рдкрд┐рдЫрд▓реЗ - рд╡рд░реНрддрдорд╛рди рджреИрдирд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рдЕрдВрддрд░ рдЦреЛрдЬрддреЗ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рдХрд╛рдо рдЗрди рдЕрдВрддрд░реЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рдорд╛рддреНрд░рд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ред
def find_max_subarray(a, low, high):
рдФрд░ рдХреНрд░реЙрд╕-рдЕрдзрд┐рдХрддрдо рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди (рдордзреНрдп-рдордзреНрдп-рд╡рд┐рднрд╛рдЬрди рд╕реЗ рдЧреБрдЬрд░рдирд╛)ред
def find_crossing(a, low, mid, high): max_left = 0 max_right = 0 left_sum = -1e308 sum = 0
рдареАрдХ рд╣реИ, рд╣рдореЗрдВ рд╡рд╣ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд░реБрдЪрддрд╛ рд╣реИ
min, max, sum = find_max_subarray(courses, 0, len(courses)-1) print courses[min] print courses[max] print sum
рдирддреАрдЬрддрди, рдореБрдЭреЗ рдорд┐рд▓ рдЧрдпрд╛
['2008-07-16', 0.07420000000000115, '23.1269']
['2009-02-05', 0.12059999999999604, '36.1257']
13.1194
рдФрд░ рдереЛрдбрд╝рд╛ рдЦреЗрд▓, 2011 рдХреА рдирд┐рдЪрд▓реА рддрд╛рд░реАрдЦ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛
['2011-05-05', 0.006199999999999761, '27.2657']
['2011-09-26', 0.12530000000000285, '32.0980']
4.9576
рд╕рднреА рдХреЛрдб
gist.github.com/1257729 рдкрд░
рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!