рдкреБрди: рдбреЙрд▓рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╕рдорд╕реНрдпрд╛ "рдЕрдзрд┐рдХрддрдо-рд╕рдмрд░реЗ"

рд╣рд╛рд▓ рдХреЗ рд▓реЗрдЦ "рдбреЙрд▓рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░" рдЕрдзрд┐рдХрддрдо-рд╕рдмрд░реЗ "рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, 3 рдмрд╛рд░, рдореИрдВ рдереВрдХрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрд╣ рдЖрд▓реЗрдЦ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реЗ 5 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рд░реВрдмрд▓ рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рдбреЙрд▓рд░ рдХреА рд╡рд┐рдирд┐рдордп рджрд░ рдореЗрдВ рдЕрдВрддрд░ рд╕реЗ рдЖрдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХрдорд╛рдИ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдЦрдХ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ "рд╕реБрдВрджрд░" рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЙрд╕рдиреЗ рдЦреБрдж рдкрд╛рдпрд╛ (рд╡рд┐рднрд╛рдЬрд┐рдд рдФрд░ рдЬреАрддрдирд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рдБ), рдФрд░ рдЬреЛ O (n lg n) рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ...

рдХрд╛рдорд░реЗрдб, рдпрд╣ рд╢рд░реНрдордирд╛рдХ рд╣реИ рдФрд░ рдмреНрд▓реЙрдЧ "рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо" рдХреЗ рд▓рд┐рдП рдЕрдкрдорд╛рдирдЬрдирдХ рд░реВрдк рд╕реЗ рдПрдХ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред рд╕рд░рдгреА рдореЗрдВ рд╕рдмрд░реНрд░реЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдЕрдзрд┐рдХрддрдо рдпреЛрдЧ O (n) рдореЗрдВ рдЦреЛрдЬрд╛ рдЧрдпрд╛ рд╣реИ! рдпрджрд┐ рдХреЗрд╡рд▓ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╢реНрд░рджреНрдзреЗрдп рд╣реЛрдЧрд╛ред

рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рдиред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреБрдЫ рднреА "рдкреВрд░реНрд╡-рддреИрдпрд╛рд░" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рд▓реЗрдЦ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЙрд▓реНрдЯрд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдХреЛрдЯреЗрд╢рди "рдЕрдзрд┐рдХрддрдо-рд╕рдмрд░реЗ" рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡-рддреИрдпрд╛рд░ рдбреЗрдЯрд╛ рд╣реИрдВред рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛ "рдЕрдзрд┐рдХрддрдо-рдЙрдкрд╢реНрд░реЗрдгреА" рдХрд╛рд░реНрдп рдХреЛ рдЙрдмрд╛рд▓ рдирд╣реАрдВ рдкрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, "рдЕрдзрд┐рдХрддрдо-рд╕рдмрд░реЗрд░реА" рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд▓реЗрдЦрдХ рдиреЗ рдЬреЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╡рд╣ рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕рд░рдгреА A рдХреЗ рд▓рд┐рдП i <= j рдХреЗ рд╕реВрдЪрдХ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ A [j] -A [i] рдЕрдзрд┐рдХрддрдо (рдпрд╛ рдиреНрдпреВрдирддрдо) рд╣реИред

рджреЛ рддрд┐рдерд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп, рд╡рд┐рдирд┐рдордп рджрд░ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдЕрдВрддрд░ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд╣реИ, рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЕрдзрд┐рдХрддрдо рдП [рдЬреЗ] рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕рдХреЗ рдФрд░ рдиреНрдпреВрдирддрдо рдиреНрдпреВрдирддрдо рдП [i] рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдЗрд╕реЗ рдЕрдВрддрд░рд╛рд▓ (0, рдЬреЗ) рдкрд░ рдЕрдзрд┐рдХрддрдо рд╣реИ ред рдпрд╣ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рджрд┐рдЦрддрд╛ рд╣реИ:

def find(A): currentMin = 1e308 currentMinIndex = None maxDiff = -1e308 bestResult = None for i, v in enumerate(A): if v < currentMin: currentMin, currentMinIndex = v, i if v - currentMin > maxDiff: maxDiff, bestResult = v - currentMin, (currentMinIndex, i) return bestResult, maxDiff 


рдпрд╣рд╛рдВ рдХрд░реЗрдирдореЗрдХреНрдЯрд┐рди, рдХрд░рдВрдЯрдорд╛рдЗрдВрдбреЗрдХреНрд╕ рд╡рд░реНрддрдорд╛рди рдиреНрдпреВрдирддрдо рдмреЛрд▓реА рдорд╛рди рд╣реИ рдФрд░ рдЕрдВрддрд░рд╛рд▓ (0, i) рдкрд░ рдЗрд╕рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИред I-th рдХрджрдо рдкрд░, рд╡рд░реНрддрдорд╛рди рд╕рд░реНрд╡реЛрддреНрддрдо рдкрд░рд┐рдгрд╛рдо рдХреА рддреБрд▓рдирд╛ рд╡рд░реНрддрдорд╛рди рдкрд╛рдареНрдпрдХреНрд░рдо рдореВрд▓реНрдп рдФрд░ рдиреНрдпреВрдирддрдо рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ)ред рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдЕрдВрддрд░ рдЕрдзрд┐рдХ рд╣реИ - рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдЕрдВрдд рддрдХред рдЧрдгрд┐рдд рдХреА рднрд╛рд╖рд╛:

 рдореИрдХреНрд╕рд┐рдбрд┐рдл (0) = -рдЗрдирдлрд┐рдирд┐рдЯреА
 maxDiff (i) = рдореИрдХреНрд╕ (maxDiff (i-1), A [i] - рдорд┐рдирдЯ (A [0: i])), 
           рдЬрд╣рд╛рдБ рдорд┐рдирдЯ (A [0: i]) 0 рд╕реЗ i рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдиреНрдпреВрдирддрдо рдорд╛рди рд╣реИред


рд╕рдВрджрд░реНрдн:
рдкрд┐рдЫрд▓рд╛ рд╡рд┐рд╖рдп
рдЕрдзрд┐рдХрддрдо рд╕рдмрдЕрд░реЗ рд╕рдорд╕реНрдпрд╛
рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ

рдкреБрдирд╢реНрдЪред рдореИрдВ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдореЗрдВ рдЬрд╡рд╛рдм рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рдЕрдЧрд░ рдкрд┐рдЫрд▓реЗ рд╡рд┐рд╖рдп рдореБрдЦреНрдп рдПрдХ рдкрд░ рдирд╣реАрдВ рдЧрдпрд╛ред рдореБрдЭреЗ рдорд╛рдлрд╝ рдХрд░ рджреЗрдирд╛

Source: https://habr.com/ru/post/In129755/


All Articles