рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреВрд░реЗ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рдиреАрдЪреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ - рдореИрдВ рд╡рд╣рд╛рдВ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╕рдордЭреВрдВрдЧрд╛ред
рддреЛ рдХрд╛рд░реНрдп: рдбрдмрд▓реНрд╕ рдХреЗ рджреЛ рдмрдбрд╝реЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛ (рддреАрд╕рд░реЗ рдХреНрд░рдо рдХреЗ рдЖрдХрд╛рд░реЛрдВ рдореЗрдВ)ред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд░реНрдЧ рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рднреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЖрдпрддрд╛рдХрд╛рд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХрднреА рднреА рдХрд╣реАрдВ рднреА рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдХреЛ C- рд╕рдВрдЧрдд рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╢рд╛рдпрдж рдХреЗрд╡рд▓ cout рдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ)ред
рдореИрдВ рдпрд╣рд╛рдВ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╣реИ - рдЬреЛ рд▓реЛрдЧ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╡реЗ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрд╕ рдмрд╛рдд рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрдВрдЧреЗ рдХрд┐ рдЧреБрдгрд╛ рдХреЛ рдХреИрд╕реЗ рддреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдП ...
рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЛ рдЖрдХрд╛рд░ n * n рдХреЗ рдПрдХ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рддрддреНрд╡ A (i, j) рдХреЛ [i * n + j] рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рджреЛ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ-рдЖрдпрд╛рдореА рддреЗрдЬрд╝реА рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдЧреБрдгрди рдФрд░ рдПрдХ рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рджреЛ рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИред
рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдмрд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рддрд░реАрдХрд╛ рд╣реИ
int рдорд▓реНрдЯреАрдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрд╕рдмрдб (рдбрдмрд▓ * рдП, рдХреЙрдиреНрд╕реНрдЯ рдЗрдВрдЯ рдПрди, рдбрдмрд▓ * рдмреА, рдбрдмрд▓ * рд╕реА) { int i, j, k; рдХреЗ рд▓рд┐рдП (i = 0; рдореИрдВ <n; i ++) { рдХреЗ рд▓рд┐рдП (j = 0; j <n; j ++) { c [i * n + j] = 0; рдХреЗ рд▓рд┐рдП (k = 0; k <n; k ++) { c [i * n + j] + = a [i * n + k] * b [k * n + j]; } } } рд╡рд╛рдкрд╕реА 0; }
рдзреНрдпрд╛рди рджреЗрдВ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрдХреНрд░ рдореЗрдВ рд╣рдо рдХрдИ рдмрд╛рд░ i * n рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░, c [i * n + j] рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдореЗрдореЛрд░реА рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ - рдЖрдк рдЗрд╕ рд╕рдм рдХреЛ рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЗрд╕реЗ c [i * n + j] рд╕реЗ рд╕рдорд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдм рд╕рдВрдХрд▓рдХ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рд╢рд╛рдЦрд╛ рдмрд┐рдВрджреБрдУрдВ (рдпрджрд┐, рдЖрджрд┐,) рдкрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рд░реНрджреЗрд╢ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреА рдЧрд╣рд░рд╛рдИ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рддреНред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд░реИрдЦрд┐рдХ рд╣рд┐рд╕реНрд╕рд╛ (рдЬрдм рдЧрдгрдирд╛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕реНрдерд┐рддрд┐ рдпрд╛ рдЪрдХреНрд░ рдХреЗ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЬрд╛рддреА рд╣реИ) рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдореБрдЦреНрдп рдЪрдХреНрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдПрдХ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ 4 рдЧреБрдгрд╛ рддреАрд╕рд░реЗ рдЪрдХреНрд░ рдХреЗ рдЕрдВрджрд░ рд╣реЛред рдареАрдХ рд╣реИ, рд╣рдо рд╕реНрдореГрддрд┐ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рдФрд░ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдФрд░ рд╕рдВрдХреЗрдд рдореЗрдВ рд╕рдм рдХреБрдЫ рдмрдЪрд╛рдПрдВрдЧреЗ, рдЬреЛ рдХрд╛рдо рдХреЛ рдЧрддрд┐ рднреА рджреЗрддреЗ рд╣реИрдВред рд╣рдо рдореИрдЯреНрд░рд┐рд╕ рдХреЗ рд╕рдо рдФрд░ рд╡рд┐рд╖рдо рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдбрдмрд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд▓реВрдк рдХреЗ рдЕрдВрджрд░ рд╕рдорддрд╛ рдХреА рдЬрд╛рдВрдЪ рди рд╣реЛ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдЬрд╛рдВрдЪ рд▓реЗрдВред рд╣рдореЗрдВ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдорд┐рд▓рддрд╛ рд╣реИ:
int рдорд▓реНрдЯреАрдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрд╕рдХ (рдбрдмрд▓ * рдП, рдХреЙрдиреНрд╕реНрдЯ рдЗрдВрдЯ рдПрди, рдбрдмрд▓ * рдмреА, рдбрдмрд▓ * рд╕реА) { double s1 = 0, s2 = 0, s3 = 0, s4 = 0; рдбрдмрд▓ * рдПрдл, * рдЬреА, * рдПрдЪ; int i, j, k; рдЕрдЧрд░ (n% 2 == 0) { рдХреЗ рд▓рд┐рдП (i = 0; рдореИрдВ <n-1; рдореИрдВ + = 2) { f = a + i * n; рдХреЗ рд▓рд┐рдП (j = 0; j <n-1; j + = 2) { рдЬреА = рдмреА + рдЬреЗ; рдХреЗ рд▓рд┐рдП (k = 0; k <n; k ++) { s1 + = f [k] * g [n * k]; s2 + = f [n + k] * g [n * k]; s3 + = f [k] * g [n * k + 1]; s4 + = f [n + k] * g [n * k + 1]; } h = c + i * n + j; h [0] = s1; s1 = 0; h [n] = s2; s2 = 0; h [рез] = s3; s3 = 0; h [n + 1] = s4; s4 = 0; } } } рдФрд░ { рдХреЗ рд▓рд┐рдП (i = 0; рдореИрдВ <n-1; рдореИрдВ + = 2) { f = a + i * n; рдХреЗ рд▓рд┐рдП (j = 0; j <n-1; j + = 2) { рдЬреА = рдмреА + рдЬреЗ; рдХреЗ рд▓рд┐рдП (k = 0; k <n; k ++) { s1 + = f [k] * g [n * k]; s2 + = f [n + k] * g [n * k]; s3 + = f [k] * g [n * k + 1]; s4 + = f [n + k] * g [n * k + 1]; } h = c + i * n + j; h [0] = s1; s1 = 0; h [n] = s2; s2 = 0; h [рез] = s3; s3 = 0; h [n + 1] = s4; s4 = 0; } рдЕрдЧрд░ (j == n-1) { рдЬреА = рдмреА + рдЬреЗ; рдХреЗ рд▓рд┐рдП (k = 0; k <n; k ++) { s1 + = f [k] * g [n * k]; s2 + = f [n + k] * g [n * k]; } h = c + i * n + j; h [0] = s1; s1 = 0; h [n] = s2; s2 = 0; } } рдЕрдЧрд░ (i == n-1) { f = a + i * n; рдХреЗ рд▓рд┐рдП (j = 0; j <n-1; j + = 2) { рдЬреА = рдмреА + рдЬреЗ; рдХреЗ рд▓рд┐рдП (k = 0; k <n; k ++) { s1 + = f [k] * g [n * k]; s3 + = f [k] * g [n * k + 1]; } h = c + i * n + j; h [0] = s1; s1 = 0; h [рез] = s3; s3 = 0; } рдЕрдЧрд░ (j == n-1) { рдЬреА = рдмреА + рдЬреЗ; рдХреЗ рд▓рд┐рдП (k = 0; k <n; k ++) { s1 + = f [k] * g [n * k]; } h = c + i * n + j; h [0] = s1; s1 = 0; } } } рд╡рд╛рдкрд╕реА 0; }
рдЦреИрд░, рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ред рдЬрдм рд╣рдо рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рд░реИрдо рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рд▓реЗрдиреА рд╣реЛрддреА рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдЬрдм рд╣рдо рдХреЙрд▓рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ)ред рд░реИрдо рд╕реЗ рдХреИрд╢ рддрдХ, рдЬрд╛рдирдХрд╛рд░реА рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИ (рдпрд╛рдиреА рдЬрдм рд╣рдо рдПрдХ рддрддреНрд╡ рдкрдврд╝рддреЗ рд╣реИрдВ - рдЗрд╕рдХреЗ рдмрд╛рдж рдХрдИ рддрддреНрд╡ рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ), рдФрд░ рдЬрдм рд╣рдо рдХреЙрд▓рдо рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ - рддреЛ рд╣рдореЗрдВ рд╣рд░ рдмрд╛рд░ рдореЗрдореЛрд░реА рдореЗрдВ рдЪрдврд╝рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣рдореЗрдВ рдХреИрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рдерд╛, рдФрд░ рд░реИрдо рдХреЗ рд╕рд╛рде рдирд╣реАрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░реЗрдВрдЧреЗ: рд╣рдо рдЕрдкрдиреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд▓рдЧрднрдЧ 100 рд╕реЗ рдЙрдк-рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ 100 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдЖрдХрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЛрддрд╛ рд╣реИ)ред рдпрджрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдиреАрдЪреЗ рдФрд░ рджрд╛рдИрдВ рдУрд░ рд╕реЗ рдЖрдпрддрд╛рдХрд╛рд░ рдЯреБрдХрдбрд╝реЗ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВред рд╣рдо рдЕрдкрдиреЗ рдЙрдкрдорд╛рддреНрд░рд╛рдУрдВ A (1,1), ..., A (n, n) рдХреЛ рдХреНрд░рдорд╢рдГ рдХрд╣рддреЗ рд╣реИрдВред рдФрд░ рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдмрдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░реЗрдВрдЧреЗред рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рд╕рд╛рдорд╛рдиреНрдп рдЧреБрдгрд╛ рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдм рдЬрдм рд╣рдо рджреЛ рдЫреЛрдЯреЗ рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рджреЛрдиреЛрдВ рдХреИрд╢ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдЧреБрдгрди рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ "рдПрдХ рд╕рдмрдореЗрдЯреНрд░рд┐рдХреНрд╕ рд▓реЗ рд▓реЛ" рдФрд░ "рдХреНрдпрд╛ рд╣реИ, рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП, рдПрдХ рд╕рдмрдореЗрдЯреНрд░рд┐рдХреНрд╕ рдбрд╛рд▓рд┐рдП" рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп, рд╕рд╛рде рд╣реА рдЖрдпрддрд╛рдХрд╛рд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпред рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдВрдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЖрдпрддрд╛рдХрд╛рд░ рдЧреБрдгрди рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬреИрд╕реЗ рдХрд┐ рд╡рд░реНрдЧ рдХреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдПред рдЕрдм рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдпрддрд╛рдХрд╛рд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдп рд▓рд┐рдЦрдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рдерд╛, рдФрд░ рд╡рд░реНрдЧ рдХреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдЙрдкрдирд╛рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдп рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
int рдорд▓реНрдЯреАрдореИрдЯреНрд░рд┐рдХреНрд╕рдмреНрд▓реЙрдХ (рдбрдмрд▓ * рдП, рдХреЙрдиреНрд╕реНрдЯ рдЗрдиреНрдЯ рдПрди, рдбрдмрд▓ * рдмреА, рдХрд╛рд╕реНрдЯ рдЗрдВрдЯ рдПрдо, рдбрдмрд▓ * рд░реЗрд╕, рдбрдмрд▓ * рд╕реА, рдбрдмрд▓ * рдбреА, рдбрдмрд▓ * рдИ) { int n_block = n / m; int m_small; int i, j, k, o; m_small = n-n_block * m; clearMatrix (рд░реЗрд╕, рдПрди * рдПрди); рдХреЗ рд▓рд┐рдП (i = 0; рдореИрдВ <= n_block; рдореИрдВ ++) { рдХреЗ рд▓рд┐рдП (j = 0; j <= n_block; j ++) { рдХреЗ рд▓рд┐рдП (k = 0; k <= n_block; k ++) { рдЕрдЧрд░ (i <n_block && j <n_block && k <n_block) { getSubMatrix (рдП, рдПрди, рд╕реА, рдПрдо, рдЖрдИ, рдХреЗ); getSubMatrix (b, n, d, m, k, j); рдорд▓реНрдЯреАрдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрд╕ (рд╕реА, рдПрдо, рдбреА, рдИ); setSubMatrixAdded (рд░реЗрд╕, рдПрди, рдИ, рдПрдо, рдЖрдИ, рдЬреЗ); } рдФрд░ рдЕрдЧрд░ (i <n_block && j <n_block && k == n_block) { getSubMatrix (рдП, рдПрди, рд╕реА, рдПрдо, рдЖрдИ, рдХреЗ); getSubMatrix (b, n, d, m, k, j); рдорд▓реНрдЯреАрдореИрдЯреНрд░рд┐рдХреНрд╕Rect (c, m, d, m_small, m, e); setSubMatrixAdded (рд░реЗрд╕, рдПрди, рдИ, рдПрдо, рдЖрдИ, рдЬреЗ); } рдФрд░ рдЕрдЧрд░ (i == n_block && j <n_block && k <n_block) { getSubMatrix (рдП, рдПрди, рд╕реА, рдПрдо, рдЖрдИ, рдХреЗ); getSubMatrix (b, n, d, m, k, j); рдорд▓реНрдЯреАрдореИрдЯреНрд░рд┐рдХреНрд╕Rect (c, m_small, d, m, m, e); setSubMatrixAdded (рд░реЗрд╕, рдПрди, рдИ, рдПрдо, рдЖрдИ, рдЬреЗ); } рдЕрдЧрд░ (i == n_block && j <n_block && k == n_block) { getSubMatrix (рдП, рдПрди, рд╕реА, рдПрдо, рдЖрдИ, рдХреЗ); getSubMatrix (b, n, d, m, k, j); рдорд▓реНрдЯреАрдореИрдЯреНрд░рд┐рдХреНрд╕Rect (c, m_small, d, m_small, m, e); setSubMatrixAdded (рд░реЗрд╕, рдПрди, рдИ, рдПрдо, рдЖрдИ, рдЬреЗ); } рдФрд░ рдЕрдЧрд░ (i <n_block && j == n_block && k <n_block) { getSubMatrix (рдП, рдПрди, рд╕реА, рдПрдо, рдЖрдИ, рдХреЗ); getSubMatrix (b, n, d, m, k, j); рдорд▓реНрдЯреАрдореИрдЯреНрд░рд┐рдХреНрд╕Rect (c, m, d, m, m_small, e); setSubMatrixAdded (рд░реЗрд╕, рдПрди, рдИ, рдПрдо, рдЖрдИ, рдЬреЗ); } рдФрд░ рдЕрдЧрд░ (i <n_block && j == n_block && k == n_block) { getSubMatrix (рдП, рдПрди, рд╕реА, рдПрдо, рдЖрдИ, рдХреЗ); getSubMatrix (b, n, d, m, k, j); рдорд▓реНрдЯреАрдореИрдЯреНрд░рд┐рдХреНрд╕Rect (c, m, d, m_small, m_small, e); setSubMatrixAdded (рд░реЗрд╕, рдПрди, рдИ, рдПрдо, рдЖрдИ, рдЬреЗ); } рдФрд░ рдЕрдЧрд░ (i == n_block && j == n_block && k <n_block) { getSubMatrix (рдП, рдПрди, рд╕реА, рдПрдо, рдЖрдИ, рдХреЗ); getSubMatrix (b, n, d, m, k, j); multMatrixRect (c, m_small, d, m, m_small, e); setSubMatrixAdded (рд░реЗрд╕, рдПрди, рдИ, рдПрдо, рдЖрдИ, рдЬреЗ); } рдФрд░ рдЕрдЧрд░ (i == n_block && j == n_block && k == n_block) { getSubMatrix (рдП, рдПрди, рд╕реА, рдПрдо, рдЖрдИ, рдХреЗ); getSubMatrix (b, n, d, m, k, j); рдорд▓реНрдЯреАрдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрд╕ (рд╕реА, рдПрдо_рд╕реНрдореЙрд▓, рдбреА, рдИ); setSubMatrixAdded (рд░реЗрд╕, рдПрди, рдИ, рдПрдо, рдЖрдИ, рдЬреЗ); } } } } рд╡рд╛рдкрд╕реА 0; }
рд╣рдо рд╣рд┐рд▓реНрдмрд░реНрдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рддрддреНрд╡ рдПрдХрддрд╛ рд╕реЗ рдХрдо рд╣реИрдВ рдФрд░ рдпрд╣ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ (рдХреЛрдИ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред
рджреЛрд╣рд░рд╛ рдлрд╛рд░реНрдореВрд▓рд╛ (рдЗрдВрдЯ рдореИрдВ, рдЗрдВрдЯ рдЬреЗ, рдЗрдВрдЯ рдПрди) { рд╡рд╛рдкрд╕реА 1 / (рдбрдмрд▓ (i + j + 1)); }
рдпрд╣рд╛рдВ рдпрд╛ рдпрд╣рд╛рдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреВрд░рд╛ рдкрд╛рда
рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕_test.cpp рдлрд╝рд╛рдЗрд▓:
g ++ рдореИрдЯреНрд░рд┐рдХреНрд╕_test.cpp -O3
рдпрд╣рд╛рдВ рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ (рдЖрдИрдореИрдХ рдФрд░ рддреЛрд╢рд┐рдмрд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдХрд╛ рдЖрдХрд╛рд░ 200 рд╣реИ, рдпрд╣ рдЗрд╖реНрдЯрддрдо рд▓рдЧрддрд╛ рд╣реИ, рдПрдерд▓реЙрди рдХреЗ рд▓рд┐рдП рдпрд╣ 115 рд╕реЗ рдЕрдзрд┐рдХ рдЗрд╖реНрдЯрддрдо рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдорд╛рддреНрд░рд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рднреА рдпрд╣ рдЦреБрдж рдХреЛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкрдХреНрд╖ рд╕реЗ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ):
рдЯреЗрд╕реНрдЯ рдХрдВрдкреНрдпреВрдЯрд░:
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдмрдврд╝реЛрддрд░реА рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ (рд╕рдмрд╕реЗ рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ 10 рдЧреБрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рддреНрд╡рд░рдг)ред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рджреЛрд╣рд░реЗ рдХреЛрд░ Core2Duo рдиреЗ рдПрдХ рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рдирд┐рднрд╛рдИ рдереАред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдорд▓реНрдЯреАрдереНрд░реЗрдб рдпрд╛ рдПрдордкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдирд╛ рд╕рд╣реА рд╣реЛрдЧрд╛ рдФрд░ 1.8-1.9 рдЧреБрдирд╛ рдХреА рд╡реГрджреНрдзрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдкреНрд░рдЧрддрд┐ рдЕрднреА рднреА рдЦрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ 5 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╕рд┐рд░ рд╕реЗ рдореЙрдбрд▓ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЬрд╛рддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдб рднрдпрд╛рдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдФрд░ рдпрд╣ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рд╡рд┐рдзрд┐ рдЦреБрдж рдирд╣реАрдВ рд╣реИ рдЬреЛ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рддрдХрдиреАрдХреЗрдВред