Nth рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рдкреНрд░рддрд┐ рд╣реЗ (рд▓реЙрдЧ рдПрди)

рдПрдмреАрдмреАрд╡рд╛рдИ рдореЗрдВ рдиреМрдХрд░реА рдкрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдкрдврд╝рддреЗ рд╣реБрдП, рдореИрдВ рдЗрд╕рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реВрдВ:
рдЬрд▓реНрджреА - O (рд▓реЙрдЧ рдПрди) рд╕рдВрдЦреНрдпрд╛рдУрдВ рдкрд░ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП - Nth рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛ рдЦреЛрдЬреЗрдВ
рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдФрд░ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдУ (рдПрди) рдХреЗ рджреМрд░рд╛рди рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗрд╡рд▓ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд╕рд┐рд░ рдкрд░ рдЖрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╛рдж рдореЗрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рдВрдХреЗрддрди рд╕реЗ рдЖрдЧреЗ рдмрдврд╝реВрдБрдЧрд╛ рдПрди рдХреЛ n ред рдореИрдВ рднреА рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЕрдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛: \ mathbb {N} _0 = \ left \ {0, 1, 2, 3, ... \ right \} рдЧреИрд░-рдирдХрд╛рд░рд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХ \ mathbb {N} _1 = \ left \ {1, 2, 3, ... \ right \} рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдЧрдгрд┐рддреАрдп рдкрд░рдВрдкрд░рд╛рдУрдВ рдореЗрдВ, рдХрдИ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдореЗрдВ 0. рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдм рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рдЧрдгрд┐рддреАрдп рдЧреНрд░рдВрдереЛрдВ рдореЗрдВ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рддреЛ рд╕рдорд╛рдзрд╛рди рд╣реИ

рдирдЯ [ рез, рдкреГред 112 ] рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлреЙрд░реНрдо рдХреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд╣рдЪрд╛рди рджреЗрддрд╛ рд╣реИ:
\ start {pmatrix} F_ {n + 1} & F_n \\ F_n & F_ {n-1} \ end {pmatrix} = \ start {pmatrix} 1 & 1 \\ 1 & 0 \ end / рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрд░реНрде} ^ n
рдкрд╣рдЪрд╛рди рдкреНрд░рдорд╛рдг рдХреЗ рдмрд┐рдирд╛ рджреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рд╕рд╛рдмрд┐рдд рд╣реЛрддреА рд╣реИред
рджрд╛рдИрдВ рдУрд░ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдХрднреА-рдХрднреА рдХреНрдпреВ-рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирд┐рд░реВрдкрд┐рдд:
Q = \ start {pmatrix} 1 & 1 \\ 1 & 0 \ end {pmatrix}
рдкрд╣рдЪрд╛рди рд╕реЗ рд╣рдореЗрдВ рд╡рд╣ рдорд┐рд▓рддрд╛ рд╣реИ F_n = Q ^ {n-1} \ рдмрд╛рдПрдБ (1,1 \ рджрд╛рдПрдБ) ред рдпрд╛рдиреА рдЧрдгрдирд╛ рдХрд░рдирд╛ F_n рд╣рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ Q ^ {n-1} рдФрд░ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡ рд▓реЗрдВ (1 рд╕реЗ рдХреНрд░рдорд╛рдВрдХ)ред

рдЧрдгрдирд╛ рдХреЗ рдмрд╛рдж рд╕реЗ F_n рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдПрдХ рд╢рдХреНрддрд┐ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд╣рдо рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рд╣рдореЗрдВ рдХреБрдЫ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреЗрдВ рдПрдо рдПрдХ рд╢рдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдард╛рдпрд╛ рдЬрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП n \ in \ mathbb {N} _1 ред рдпрд╣ рднреА рдорд╛рди рд▓реЗрдВ рдХрд┐ n рджреЛ рдХреА рд╢рдХреНрддрд┐ рд╣реИ, рдЕрд░реНрдерд╛рддреН n = 2 ^ i, i \ in \ mathbb {N} _0 ред
рдо ^ n рдПрдХ рдкреЗрдбрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдпрд╣ рд╕рдВрджрд░реНрднрд┐рдд рд╣реИ:
M ^ n = M ^ {n / 2} \ cdot M ^ {n / 2} = ... = \ prod ^ {n} _ {1} M ^ 1 ред
рддрджрдиреБрд╕рд╛рд░, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдо ^ n рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ M ^ {n / 2} рдФрд░ рдЦреБрдж рд╕реЗ рдЧреБрдгрд╛ рдХрд░реЗрдВред рдЧрдгрдирд╛ рдХрд░рдирд╛ M ^ {n / 2} рдЖрдкрдХреЛ рдЙрд╕реА рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ M ^ {n / 4} рдЖрджрд┐
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдкреЗрдбрд╝ рдХреА рдКрдВрдЪрд╛рдИ рд╣реИ \ n рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ ред
рдЧрдгрдирд╛ рд╕рдордп рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдВ рдо ^ n ред рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдо рдХрд┐рд╕реА рднреА рд╣рдж рддрдХ рдПрдХ рдирд┐рд░рдВрддрд░ рдЖрдХрд╛рд░ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рдбрд┐рдЧреНрд░реА рдХреЗ рд▓рд┐рдП рджреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ O \ рдмрд╛рдПрдБ (1 \ рджрд╛рдПрдБ) ред рдРрд╕реЗ рд╕рднреА рдЧреБрдгрд╛рдУрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ \ log_2n ред рдЗрд╕рд▓рд┐рдП, рдЧрдгрдирд╛ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдо ^ n рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ O \ рдмрд╛рдПрдБ (\ n n рджрд╛рдпрд╛рдБ рд▓реЙрдЧ рдХрд░реЗрдВ) ред

рдФрд░ рдЕрдЧрд░ n рджреЛ рдХреА рд╢рдХреНрддрд┐ рдирд╣реАрдВ рд╣реИ?

рдЕрдм рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: рдХреНрдпрд╛ рдЕрдЧрд░ n рджреЛ рдХреА рд╢рдХреНрддрд┐ рдирд╣реАрдВ рд╣реИ? рдХреЛрдИ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛ n рдЙрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдШрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рджреЛ рдХреА рд╢рдХреНрддрд┐ рд╣реИрдВ, рдФрд░ рджреЛрд╣рд░рд╛рд╡ рдХреЗ рдмрд┐рдирд╛ (рд╣рдо рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдХрд┐рд╕реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рджрд╢рдорд▓рд╡ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ)ред рдпрд╛рдиреА
n = \ sum_ {p \ _ P} 2 ^ p рдореЗрдВ ред
рдЬрд╣рд╛рдБ P_n \ subset \ mathbb {N} _0 - рдХрдИ рдбрд┐рдЧреНрд░реА рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдареЛрд╕ n ред рдЕрдЧрд░ рдЖрдкрдХреЛ рд╡рд╣ рдпрд╛рдж рд╣реИ n рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдбрд┐рдЧреНрд░реА рд╣реИ, рддреЛ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
M ^ n = \ prod_ {p_ in P_n} M ^ {2 ^ p} ред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЙрддреНрдкрд╛рдж рд╕рд░рд╛рд╣рдиреАрдп рдирд╣реАрдВ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЧреБрдгрд╛ рдХреЗ рджреМрд░рд╛рди рдСрдкрд░реЗрдВрдб рдХрд╛ рдХреНрд░рдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рддрдерд╛рдХрдерд┐рдд рдХреЗ рд▓рд┐рдП рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдХреА рдкрд░рд┐рдкрдХреНрд╡рддрд╛ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдЯреНрд░рд┐рдХреНрд╕ рдо ^ i рдХреЗ рд▓рд┐рдП рдкрд╛рд░рдЧрдореНрдп рд╣реИ рдПрдо ^ рдЬреЗ ред i, j \ in \ mathbb {N} _0 ред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╕рдордп рдСрдкрд░реЗрдВрдб рдХреЗ рдЖрджреЗрд╢ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЪреАрдЬреЗрдВ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред

рддреЛ, рдЧрдгрдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдо ^ n рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
  1. рд╡рд┐рдШрдЯрд┐рдд n рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛ рдХреА рд╢рдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдпреЛрдЧ P_n ред
  2. рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ S_ \ left \ {M ^ p | P_n \ right \} рдореЗрдВ p \ p ред
  3. рдЧрдгрдирд╛ M ^ n = \ prod_ {s \ _ S} s рдореЗрдВ ред

рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рд╕рдордп рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдВред
рдкрд╣рд▓рд╛ рдХрджрдо рд╕рдордп рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ O \ рдмрд╛рдПрдБ (\ рдмрд╛рдПрдБ \ lfloor \ log_2n \ rfloor + 1 \ right) = O \ рдмрд╛рдПрдБ (\ log n \ рджрд╛рдПрдБ) рдЬрд╣рд╛рдБ \ lfloor log_2 n \ rfloor + 1 - рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ n ред
рджреВрд╕рд░рд╛ рдЪрд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ O \ рдмрд╛рдПрдБ (\ рдмрд╛рдПрдБ) (\ lfloor \ log_2 n \ rfloor + 1 \ right) \ cdot \ log_2 n \ рджрд╛рдПрдБ) = O \ рдмрд╛рдПрдБ (\ рдмрд╛рдПрдБ \ рд▓реЙрдЧ ^ 2 n \ рджрд╛рдПрдБ) рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдХреЛрдИ рдФрд░ рдЕрдзрд┐рдХ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ \ lfloor log_2 n \ rfloor + 1 рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдПрдХ рд╢рдХреНрддрд┐ рдореЗрдВ рдКрдкрд░ рдЙрдард╛рдирд╛ред
рддреАрд╕рд░рд╛ рдЪрд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ O \ рдмрд╛рдПрдБ (\ рдмрд╛рдПрдБ \ lfloor \ log_2 n \ rfloor \ right) = O \ рдмрд╛рдПрдБ (\ рдмрд╛рдПрдБ \ log n \ рджрд╛рдПрдБ) рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ \ lfloor log_2 n \ rfloor рд╕рдордпред

рдЕрдиреБрдХреВрд▓рди

рдХреНрдпрд╛ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рд╕рдордп рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рд╣рд╛рдБ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рджреВрд╕рд░реЗ рдЪрд░рдг рдореЗрдВ, рд╕реЗрдЯ рдореЗрдВ рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдПрд╕ ред рд╣рдо рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдкреА рджреЛ рдХреА рд╢рдХреНрддрд┐ рд╣реИред рдпрджрд┐ рдЖрдк рдкреЗрдбрд╝ рдХреЗ рд╕рд╛рде рдЖрдВрдХрдбрд╝реЗ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡реЗ рд╕рднреА рдкреЗрдбрд╝ рдХреЗ рдХреБрдЫ рд╕реНрддрд░реЛрдВ рдкрд░ рдЭреВрда рдмреЛрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдмрдбрд╝реЗ рд▓реЛрдЧреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЫреЛрдЯреЗ рд▓реЛрдЧреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╣рдо рд╕рдВрд╕реНрдорд░рдг рддрдХрдиреАрдХ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреЗрдбрд╝ рдХреЗ рд╕рднреА рд╕реНрддрд░реЛрдВ рдкрд░ рдЧрдгрдирд╛ рдХреА рдЧрдИ рдореИрдЯреНрд░рд┐рд╕ рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреВрд╕рд░реЗ рдЪрд░рдг рдХреЗ рдХрд╛рд░реНрдп рд╕рдордп рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ O \ рдмрд╛рдПрдБ (\ n n рджрд╛рдпрд╛рдБ рд▓реЙрдЧ рдХрд░реЗрдВ) рдФрд░ рд╕рдВрдкреВрд░реНрдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рднреА рдКрдкрд░ рд╣реИ O \ рдмрд╛рдПрдБ (\ n n рджрд╛рдпрд╛рдБ рд▓реЙрдЧ рдХрд░реЗрдВ) ред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЪрд╛рд╣рд┐рдПред

рдХреЛрдб

рдХреЛрдбрд┐рдВрдЧ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдкрд╛рдпрдерди рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рджреЛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛:
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ:
class MatrixFibonacci:
    Q = [[1, 1],
         [1, 0]]

    def __init__(self):
        self.__memo = {}

    def __multiply_matrices(self, M1, M2):
        """ 
        (       2x2)."""

        a11 = M1[0][0]*M2[0][0] + M1[0][1]*M2[1][0]
        a12 = M1[0][0]*M2[0][1] + M1[0][1]*M2[1][1]
        a21 = M1[1][0]*M2[0][0] + M1[1][1]*M2[1][0]
        a22 = M1[1][0]*M2[0][1] + M1[1][1]*M2[1][1]
        r = [[a11, a12], [a21, a22]]
        return r

    def __get_matrix_power(self, M, p):
        """    ( p   )."""

        if p == 1:
            return M
        if p in self.__memo:
            return self.__memo[p]
        K = self.__get_matrix_power(M, int(p/2))
        R = self.__multiply_matrices(K, K)
        self.__memo[p] = R
        return R

    def get_number(self, n):
        """ n-  
        (  n    )."""
        if n == 0:
            return 0
        if n == 1:
            return 1
        #     ,   ,
        # .. 62 = 2^5 + 2^4 + 2^3 + 2^2 + 2^0 = 32 + 16 + 8 + 4 + 1.
        powers = [int(pow(2, b))
                  for (b, d) in enumerate(reversed(bin(n-1)[2:])) if d == '1']
        #  ,   pythonic: http://pastebin.com/h8cKDkHX

        matrices = [self.__get_matrix_power(MatrixFibonacci.Q, p)
                    for p in powers]
        while len(matrices) > 1:
            M1 = matrices.pop()
            M2 = matrices.pop()
            R = self.__multiply_matrices(M1, M2)
            matrices.append(R)
        return matrices[0][0][0]

mfib = MatrixFibonacci()
for n in range(0, 128):
    num = mfib.get_number(n)
    print(num)

, F_1,F_2,...,F_n . :
def get_number(self, n):
    if n == 0:
        return 0
    a = 0
    b = 1
    c = 1
    for i in range(n-1):
        c = a + b
        a = b
        b = c
    return c

. a a=10,20,...,1000. a MatrixFibonacci IterationFibonacci (, ). 10 000 n \in \left [ a-5,a+5 \right ). F_n . : n <tab> T1 <tab> T2. .

, - n=300 (c , F_{94} 64 ). , , .
. gnuplot тАФ .

P.S. , TeX- . , .


  1. . , 1. . тАФ 3- . тАФ .: ┬л┬╗, 2006.

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


All Articles