рдПрдХ рдЕрдиреБрдХреВрд▓рди рдХреА рдХрд╣рд╛рдиреА



рдЕрдореВрд░реНрдд


рд▓реЗрдЦ рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЕрдиреБрдХреВрд▓рди рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдХреНрдпреВрдмрд┐рдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЪрд░рдг 0. рдПрдХ рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рд╕реЗрдЯ рдХрд░реЗрдВ!


рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВ:


рд╕рдмрд╕реЗ рд╕рд░рд▓ рдШрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдПрд▓реНрдЧреЛрд░рд┐рдердо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╢рд╛рдпрдж рдХреЛрдИ рдЫрд╛рддреНрд░ рдпрд╛ рдХреЛрдИ рд╕реНрдХреВрд▓реА рдЫрд╛рддреНрд░ рднреА рдЙрд╕реЗ рдЬрд╛рдирддрд╛ рд╣реЛред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рддрд╕реНрд╡реАрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗред

for (int i = 0; i < A.rows(); i++) { for (int j = 0; j < A.columns(); j++) { double summand = 0.0; for (int k = 0; k < B.columns(); k++) { summand += A[i][k] * B[k][j]; } C[i][j] = summand; } } 


рд╡рд░реНрдХрд▓реЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо рджреЛ рд╕рдШрди рд╡рд░реНрдЧ рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ N x N рдХреЛ рджреЛрд╣рд░реА рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ N = 1000 рд╣реИред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдШрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд░рдирдЯрд╛рдЗрдо 18.921 рд╣реИ ред рд╣рдо рдмрд╛рдж рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ (рдЖрдзрд╛рд░ рд░реЗрдЦрд╛) рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреЗрдВрдЧреЗред

рдЪрд░рдг 1. 20/80 рдирд┐рдпрдо рдХреЛ рдЬрд╛рдиреЗрдВ!


рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ 20% рд╕рдордп рдХреЛрдб рдХрд╛ 80% рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдХрд╛рд░реНрдп рдХреБрд▓ рдХреЛрдб рдХреЗ рдЗрди 20% рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рд╡рд╛рдВрдЫрд┐рдд 20% рдЖрдВрддрд░рд┐рдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдЪрдХреНрд░ рдореЗрдВ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИрдВред рдЬреЗрд╡реАрдПрдо рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдпрд╣ рдХреЛрдб рд╕рд┐рд░реНрдл-рдЗрди-рдЯрд╛рдЗрдо рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд╛рд▓рд╛ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИред рдЖрдк рдЪреЗрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрд╛рдпрдЯреЗрдХреЛрдб рджреЗрд╢реА рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - XX: + PrintCompilation -XX: + CITime ред

 $ java -XX:+PrintCompilation la4j.Demo 1 java.lang.String::hashCode (64 bytes) 2 java.lang.String::charAt (33 bytes) 3 java.lang.String::indexOf (151 bytes) 4 java.lang.String::indexOf (166 bytes) 5 java.util.Random::next (47 bytes) 6 java.util.concurrent.atomic.AtomicLong::get (5 bytes) 7 java.util.concurrent.atomic.AtomicLong::compareAndSet (13 bytes) 8 java.util.Random::nextDouble (24 bytes) 9 la4j.matrix.DenseMatrix::set (10 bytes) 1% la4j.matrix.MatrixFactory::createRandomDenseMatrix @ 30 (68 bytes) 10 la4j.matrix.MatrixFactory::createRandomDenseMatrix (68 bytes) 2% la4j.matrix.DenseMatrix::multiply @ 81 (152 bytes) 


рдпрд╣ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рд╡рд┐рдзрд┐ (la4j.matrix.DenseMatrix :: рдЧреБрдгрд╛) рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдХрд▓рд┐рдд рдХреА рдЧрдИ рдереАред рдпрд╣ рд╣рдореЗрдВ рдЖрдЧреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЧреБрдВрдЬрд╛рдЗрд╢ рджреЗрддрд╛ рд╣реИред рдкрд╣рд▓реЗ, рдЪрд▓реЛ рдЕрдВрддрд┐рдо рдЪрд░ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдЬрдм рдореВрд▓ рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕реАрдзреЗ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдЕрдВрддрд┐рдо рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ 1000x1000x1000 рдмрд╛рд░ рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧреАред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реАрдзреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

 final int aColumns = A.columns(); final int aRows = A.rows(); final int bColumns = B.columns(); final int bRows = B.rows(); for (int i = 0; i < aRows; i++) { for (int j = 0; j < aColumns; j++) { double summand = 0.0; for (int k = 0; k < bColumns; k++) { summand += A[i][k] * B[k][j]; } C[i][j] = summand; } } 

рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд░рдирдЯрд╛рдЗрдо : 16.996 рдПрд╕ ;
рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╡реГрджреНрдзрд┐: ~ 11% ;

рдЪрд░рдг 2. рдХреИрд╢реЗ рдпрд╛рдж рд░рдЦреЗрдВ!


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдРрд╕рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣рдореЗрд╢рд╛ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдХреЙрд▓рдо рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмреА рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ "рдХреЗ" рдкрд░ Iterationред рдЗрд╕ рддрд░рд╣ рдХреА рд░реАрдбрд┐рдВрдЧ рдмрд╣реБрдд рдорд╣рдВрдЧреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд╣рд░ рдмрд╛рд░ рдореЗрдореЛрд░реА рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░реАрдлрд╝реЗрдХ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдмрдЬрд╛рдп рдЗрд╕реЗ рдХреИрд╢ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗред

рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдлреЛрд░рдЯреНрд░рд╛рди рдХреЛ рдРрд╕реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдореЗрдВ рдмрд╣реБрдЖрдпрд╛рдореА рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓рдо рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреИрд╢ рдХреЛ рдареАрдХ рд╕реЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХреНрдпреВрдмрд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрдИ рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░, рдкрд╣рд▓реЗ рд╕реНрддрд░ (рдПрд▓ 1) рдХреА рдХреИрд╢ рд▓рд╛рдЗрди рдХрд╛ рдЖрдХрд╛рд░ - 64 рдмрд╛рдЗрдЯреНрд╕ - рдпрд╣ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд╕реНрддреА рдореЗрдореЛрд░реА рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓рдЧрднрдЧ рдореБрдлреНрдд рдореЗрдореЛрд░реА рдХреЗ 64 рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░реАрдлрд╝реИрдЪрд┐рдВрдЧ рд╕реЗ рдУрд╡рд░рд╣реЗрдб рджреНрд╡рд╛рд░рд╛ рдкреАрдЫрд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рд╕реНрдерд╛рди рдкрд░ 8 рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛрд╢рд┐рдХрд╛рдУрдВ (рд╕рд╛рдЗрдЬрд╝реЛрдлрд╝ (рдбрдмрд▓) = 8) рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддреЗ рд╣реИрдВред

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдореЗрдореЛрд░реА (рдХреЙрд▓рдо рдореЗрдВ) рддрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд╣реБрдВрдЪ рдХреИрд╢ рд▓рд╛рдЗрди рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИред

рдЖрдЗрдП, рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рддрддреНрд╡реЛрдВ рддрдХ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдкрд╣реБрдВрдЪ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдХреИрд╢ рдХрд╛ рдЕрдзрд┐рдХрддрдо рд▓рд╛рдн рдорд┐рд▓ рд╕рдХреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмреА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рд╣рдо рдЗрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдкрдВрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдВрдЧреЗред
 final int aColumns = A.columns(); final int aRows = A.rows(); final int bColumns = B.columns(); final int bRows = B.rows(); double BT[][] = new double[bColumns][bRows]; for (int i = 0; i < bRows; i++) { for (int j = 0; j < bColumns; j++) { BT[j][i] = B[i][j]; } } for (int i = 0; i < aRows; i++) { for (int j = 0; j < aColumns; j++) { double summand = 0.0; for (int k = 0; k < bColumns; k++) { summand += A[i][k] * BT[j][k]; } C[i][j] = summand; } } 

рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд░рдирдЯрд╛рдЗрдо : 7.334 рдПрд╕ ;
рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╡реГрджреНрдзрд┐: ~ 232% ;

рдЪрд░рдг 3. рд╕реЛрдЪреЛ!


рдЕрдзрд┐рдХ рдХреЛрдб рдерд╛, рд▓реЗрдХрд┐рди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рдордп рд▓рдЧрднрдЧ 2.5 рдЧреБрдирд╛ рдХрдо рд╣реЛ рдЧрдпрд╛ рдерд╛ред рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдкрд╖реНрдЯ рджреЛрд╖ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддреЗ рд╣реИрдВред рдореБрдЦреНрдп рдПрдХ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЪрдХреНрд░ рд╣реИрдВред рдЖрдЗрдП рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рдПрдХ рд╕рдВрдЧрдгрдирд╛рддреНрдордХ рдЪрдХреНрд░ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкреЛрдЬрд╝ рдФрд░ рдЧреБрдгрд╛ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЙрд╕реА рд╕рдордп, рдЯреНрд░рд╛рдВрд╕рдкреЛрдЬрд╝реЗрд╢рди рдкреВрд░реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕реНрддрдВрднреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ред

 final int aColumns = A.columns(); final int aRows = A.rows(); final int bColumns = B.columns(); final int bRows = B.rows(); double thatColumn[] = new double[bRows]; for (int j = 0; j < bColumns; j++) { for (int k = 0; k < aColumns; k++) { thatColumn[k] = B[k][j]; } for (int i = 0; i < aRows; i++) { double thisRow[] = A[i]; double summand = 0; for (int k = 0; k < aColumns; k++) { summand += thisRow[k] * thatColumn[k]; } C[i][j] = summand; } } 

рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд░рдирдЯрд╛рдЗрдо : 3.976 рдПрд╕ ;
рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╡реГрджреНрдзрд┐: ~ 190% ;

рдЪрд░рдг 4. рджреВрд░ рдлреЗрдВрдХ рджреЛ!


рд╣рдо рдЬрд╛рд╡рд╛ - рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдПрдХ рдФрд░ рдлрд╛рдпрджрд╛ рдЙрдард╛рддреЗ рд╣реИрдВред рдЖрдЗрдП, {} рдХреИрдЪ {} рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рдкрд░реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрд╣ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рддреБрд▓рдирд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ 1000 рддрдХ рдХрдо рдХрд░ рджреЗрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреНрдпреЛрдВ 1000 рдмрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ рдЬреЛ рд╣рдореЗрд╢рд╛ рдЭреВрдареЗ рд▓реМрдЯреЗрдВрдЧреЗ рдФрд░ 1001 рдмрд╛рд░ рд╕рдЪ рд▓реМрдЯреЗрдВрдЧреЗред

рдПрдХ рддрд░рдл - рд╣рдо рддреБрд▓рдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВ, рджреВрд╕рд░реЗ рдкрд░ - рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдУрд╡рд░рд╣реЗрдб рд╣реИред рдПрдХ рддрд░реАрдХрд╛ рдпрд╛ рджреВрд╕рд░рд╛, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреБрдЫ рд╡реГрджреНрдзрд┐ рджреЗрддрд╛ рд╣реИред

 final int aColumns = A.columns(); final int aRows = A.rows(); final int bColumns = B.columns(); final int bRows = B.rows(); double thatColumn[] = new double[bRows]; try { for (int j = 0; ; j++) { for (int k = 0; k < aColumns; k++) { thatColumn[k] = B[k][j]; } for (int i = 0; i < aRows; i++) { double thisRow[] = A[i]; double summand = 0; for (int k = 0; k < aColumns; k++) { summand += thisRow[k] * thatColumn[k]; } C[i][j] = summand; } } } catch (IndexOutOfBoundsException ignored) { } 

рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд░рдирдЯрд╛рдЗрдо: 3.594 рдПрд╕ ;
рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╡реГрджреНрдзрд┐: ~ 10% ;

рдЪрд░рдг 5. рдордд рд░реЛрдХреЛ!


рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдореИрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рд░реБрдХ рдЧрдпрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╡рд╛рдВрдЫрд┐рдд рд▓рдХреНрд╖реНрдп рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рд╣реВрдВред рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдореИрдЯреНрд░рд┐рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЬрд╛рдирд╛ рдерд╛ - рдЬреЗрдПрдПрдордП ("рдЬрд╛рд╡рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕" рдХреЗ рд▓рд┐рдП Google рдореЗрдВ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐)ред рдЕрдм рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди JAMA рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ 30% рддреЗрдЬ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯреЗ рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рд╢реБрд░реБрдЖрддреА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд▓рдЧрднрдЧ 600% рдХреА рд╡реГрджреНрдзрд┐ рд╣реБрдИред

рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп (рдпрд╣ рдПрдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдирд╣реАрдВ рд╣реИ)


рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд laj4 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдпрд╣ рдЬрд╛рд╡рд╛ рдореЗрдВ рд░реИрдЦрд┐рдХ рдмреАрдЬрдЧрдгрд┐рдд рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рдореИрдВрдиреЗ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЧрдгрд┐рдд рдореЗрдВ рдПрдХ рдкрд╛рдареНрдпрдХреНрд░рдо рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ 4 рд╡реЗрдВ рд╡рд░реНрд╖ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдЕрдм la4j рдЙрддреНрдХреГрд╖реНрдЯ рдкреНрд░рджрд░реНрд╢рди рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЕрдкрдиреЗ рд╕рдордХрдХреНрд╖реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдИ рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЕрдЧрд░ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╢рд╛рдо рдмрд┐рддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ - рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореЗрдВ рд▓рд┐рдЦреЗрдВ :)

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


All Articles