Why is squaring a number faster than multiplying two random numbers?

前端 未结 14 2072
终归单人心
终归单人心 2021-01-30 07:18

Multiplying two binary numbers takes n^2 time, yet squaring a number can be done more efficiently somehow. (with n being the number of bits) How could that be?

Or is i

14条回答
  •  清歌不尽
    2021-01-30 07:43

    Like others have pointed out, squaring can only be about 1.5X or 2X faster than regular multiplication between arbitrary numbers. Where does the computational advantage come from? It's symmetry. Let's calculate the square of 1011 and try to spot a pattern that we can exploit. u0:u3 represent the bits in the number from the most significant to the least significant.

        1011 //                               u3 * u0 : u3 * u1 : u3 * u2 : u3 * u3
       1011  //                     u2 * u0 : u2 * u1 : u2 * u2 : u2 * u3       
      0000   //           u1 * u0 : u1 * u1 : u1 * u2 : u1 * u3                 
     1011    // u0 * u0 : u0 * u1 : u0 * u2 : u0 * u3                           
    

    If you consider the elements ui * ui for i=0, 1, ..., 4 to form the diagonal and ignore them, you'll see that the elements ui * uj for i ≠ j are repeated twice.

    Therefore, all you need to do is calculate the product sum for elements below the diagonal and double it, with a left shift. You'd finally add the diagonal elements. Now you can see where the 2X speed up comes from. In practice, the speed-up is about 1.5X because of the diagonal and extra operations.

提交回复
热议问题