Sistemas de Numeración | Serie Computación y Programación #5
spanish·@abdulmath·
0.000 HBDSistemas de Numeración | Serie Computación y Programación #5
<div class="text-justify"> <div class="pull-right"><img src="https://cdn.steemitimages.com/DQmcmr2RbL8btQssCtVrErcVkKuU5L1b1WEDgEqKVfuEXAQ/Programacion.png"/><center><sub><sub>Elaborada por @abdulmath, con GIMP.</sub></sub></center></div>Saludos queridos asiduos lectores de mi blog, bienvenidos. Este post es la cuarta entrega de la serie <b>Computación y Programación</b>, en el seguiremos tratando el tema de los sistemas de numeración y su representación numérica en las diferentes bases. En esta oportunidad trataremos el <b>Algoritmo de Karatsuba</b>, el cual es un algoritmo para realizar multiplicaciones rápidas. Estos temas son parte de un curso de Programación y diseño de algoritmos. <br>La Serie <b>Computación y Programación</b> en su primera edición, consiste en una entrega diaria, donde hablaremos de un tema, en la misma abordaremos los aspectos teóricos, describiremos algunos ejemplos con el objetivo de visualizar y explicar como aplicar lo tratado durante la publicación. La misma está dirigida al público en general, pero con especial atención a estudiantes universitarios, que deseen estudiar o estudien computación, ingeniería en computación y carreras afines. Estoy abierto a sus comentarios y dudas que puedan surgir en el desarrollo del mismo. Sin perder más tiempo, iniciemos. <hr> <center> https://cdn.steemitimages.com/DQmdpxUb7HtnNdmxthWLKfUjnPA5sind9336Fgw5iy7pfv3/SeparadorGMath12.png</center> <hr> <h2><div class="phishy">El Algoritmo de Karatsuba</div></h2> Como ya hemos visto, todos los procesos para realizar las representaciones numéricas entre las diferentes bases numéricas, lo podemos describir como un algoritmo. Incluso sumar números, se puede describir como procesos algorítmicos. Ahora bien, el <b>Algoritmo de Karatsuba</b> nos provee un procedimiento para realizar productos de números muy grandes, pero de manera mucho más eficiente o rápida. Este algoritmo fue desarrollado por el Matemático Ruso [Anatolii Alexeevitch Karatsuba](https://es.wikipedia.org/wiki/Anatoli_Karatsuba) y por el otro Matemático Ruso [Yuri Petrovich Ofman](https://es.wikipedia.org/wiki/Yuri_Petr%C3%B3vich_Ofman) aproximadamente alrededor del año 1960 y publicado oficialmente en el año1962, en Proceedings of the USSR Academy of Sciences #145. + A. Karatsuba and Yu. Ofman. <i>Multiplication of Many-Digital Numbers by Automatic Computers</i>. Translation in Physics-Doklady, 7, pp. 595–596. 1963 y Proceedings of the USSR Academy of Sciences 145: 293-294. 1962. Con este algoritmo, podemos decir que el procedimiento usado es del tipo coloquialmente hablando <b>divide y vencerás,</b> ya que con este algoritmo, se reducen los posibles productos que se producen al multiplicar dos número naturales de <b>n</b> dígitos, a 4 productos de número de <b>n/2</b> dígitos. A manera general, podemos decir que reduce el producto de dos números de <b>n</b> dígitos aproximadamente: <center>https://cdn.steemitimages.com/DQmWnvtjWGLz6nawdtZzZd6HeB5K18tSfaNreQm1X5aBx6P/Img41.png</center> posibles productos de un solo dígito, el cual es exacto cuando n es una potencia de 2. Así, tenemos entonces un algoritmo más rápido, que el algoritmo básico del producto de números naturales, que requiere <center>https://cdn.steemitimages.com/DQmfBvMPmXCEPFCX6ehXFuKNSRf7TByhzqMrUq4E8gphG8R/Img42.png</center> productos posibles de un solo dígito. Podemos tratar un caso particular, si tenemos: <center>https://cdn.steemitimages.com/DQmbKMy11p5ys1DNzSTXH6D5SgLcQUAfsxwmHJi5cu5CiYV/Img43.png</center> entonces el número de productos exactos es: <center>https://cdn.steemitimages.com/DQmf9JqYu7iRWNFj7JdwG169RNraW24cb17RSGAHG9hFjNF/Img44.png</center> respectivamente. En resumen, la idea principal y básica del <b>Algoritmo de Karatsuba</b> es construir una fórmula o ecuación que nos permita poder calcular el producto de dos números naturales grandes, digamos, <b>a</b> y <b>b</b>, usando tres multiplicaciones de números más pequeños que los dados inicialmente, cada uno con aproximadamente la mitad de dígitos de a o de b, además, de algunas sumas. Formalmente: Si a y b son dos números naturales de n dígitos escritos en forma de representación decimal. Entonces, para cualquier entero positivo m menor que n, uno puede separar los dos números dados de la siguiente manera: <center>https://cdn.steemitimages.com/DQmQPhgcLerRjRoHYq5cD4gwatsUKuE4kMCMkNzYTHbjMVd/Img45.png</center> Entonces, el producto es <center>https://cdn.steemitimages.com/DQmUoy9WxTbXf5APLWdqevoSaMPgsFUETSf9u1WJtz1Efe6/Img46.png</center> donde <center>https://cdn.steemitimages.com/DQmdEFgjFYvUfUjZEzfgwN5ZjJtDE55c4pHdTuUbJ7WwVnA/Img47.png</center> Como podemos apreciar, las ecuaciones anteriores necesitan de 4 productos, pero estos pueden ser calculados con solo tres multiplicaciones, esto es, que una de los cuatro posibles productos podría ser descartado usando algunas sumas adicionales con: <center>https://cdn.steemitimages.com/DQmNm5FLgWQ4ZL7rQsA7E39VMempR9QicT54jRYmCAUTdeg/Img48.png</center> ya que <center>https://cdn.steemitimages.com/DQmWgTPyvS6EXCtZ6yuBpytMawLv8AB8UZR8pSxkB6vmKCA/Img49.png</center> <hr> <center>https://cdn.steemitimages.com/DQmXDYS97XY5Ak4JQ8dRoTDseYfjTrW9gfCtFWUrNGEufe5/SeparadorGMath19.png</center> <hr> <h4>Ejemplo 01: Calcular el producto de 1234 y 6789.</h4> <br>Para calcular el producto de estos dos número siguiendo el algoritmo antes descrito, tenemos que elegir m=2, así tenemos lo siguiente: <center>https://cdn.steemitimages.com/DQmWG3EhhYrgCaz9iH2wqF7szaZrthxXTrxNjVR8erFCAfA/Img50.png</center> donde <center>https://cdn.steemitimages.com/DQmbz77aQN9JutBanoQHuAGBCx1pmzGgwDXq8D6LPtJET2J/Img51.png</center> Luego, <center>https://cdn.steemitimages.com/DQmTaKf8BNsw9YHg83CVJTNMXiaypmsM8h6KgnFVX6Gq94G/Img52.png</center> Entonces, tenemos que el producto es igual a: <center>https://cdn.steemitimages.com/DQma4QSQcmjUtSt2LJKwSEUynbbQJiSrYixXWWBpq4WgGLB/Img53.png</center> <center>https://cdn.steemitimages.com/DQmdpxUb7HtnNdmxthWLKfUjnPA5sind9336Fgw5iy7pfv3/SeparadorGMath12.png</center> <hr> Queridos amigos y lectores, espero hayan disfrutado de este quinto post de la serie de <b>Computación y Programación</b>, de igual manera los invito para la próxima entrega de esta serie, donde continuaremos tratando este tan bonito tema de los sistemas de numeración y otros aspectos. Espero que esto pueda servir de apoyo a ustedes, hijos, nietos, sobrinos o amigos que quieran aprender un poco más del maravilloso mundo de las matemáticas y la computación. No olviden dejar sus comentarios. Saludos y nos leemos pronto. <br>Si desean consultar un poco más del tema pueden usar las siguientes referencias. + Knuth, Donald Ervin. The art of computer programming. Vol. 1, 2, y 3. Pearson Education, 1997. + Knuth, Donald Ervin. Fundamental algorithms: the art of computer programming. 1973. + Knuth, Donald Ervin. Computer programming as an art. ACM Turing award lectures. ACM, 2007. + A. A. Karatsuba and Yu. Ofman. <i>Multiplication of Many-Digital Numbers by Automatic Computers</i>. Translation in Physics-Doklady, 7, pp. 595–596. 1963 y Proceedings of the USSR Academy of Sciences 145: 293-294. 1962. + A. A. Karatsuba. <i>The Complexity of Computations</i>. Proceedings of the Steklov Institute of Mathematics 211:169-183. 1995. <hr> También los invito a leer las anteriores publicaciones de está serie de <b>Computación y Programación</b>, que estoy seguro serán de su interés: |<a href="https://steemit.com/castellano/@abdulmath/sistemas-de-numeracion-or-serie-computacion-y-programacion-1">Sistemas de Numeración #1</a>|<a href="https://steemit.com/castellano/@abdulmath/sistemas-de-numeracion-or-serie-computacion-y-programacion-2">Sistemas de Numeración #2</a>| |---|---| |<a href="https://steemit.com/spanish/@abdulmath/sistemas-de-numeracin-serie-computacin-y-programacin-3-1528868926"><b>Sistemas de Numeración #3</b></a>|<a href="https://steemit.com/spanish/@abdulmath/sistemas-de-numeracin-serie-computacin-y-programacin-4-1528950578"><b>Sistemas de Numeración #4</b></a>| <hr> Todas las ecuaciones fueron creadas y editadas por @abdulmath con https://cdn.steemitimages.com/DQmYbufK9HG9LpAUVgEcFSNVmZG2irkjVy1duWbYqVyVtf4/LateX.png, y GIMP. <center> https://cdn.steemitimages.com/DQmPqz2gevojVdxDQRk7wFj5uHqtD8VrmDKaAC3FYqrDKfJ/FinalGMath01.png <br><sub>Imagen elaborada por @abdulmath, diseñadas y editada con Karbon y GIMP.</sub></center> </div>
👍 abdulmath, dick.sledge, marketstack, lionindayard, angelica7, carmenmdm, rmartinezpoeta, carlucmeza, hr1, vidaparasita, reyvaj, ufv, duque, codebyte, hadro, rvilov, josepxh, series2688, thecheoz, hectorvarelarey, silwanyx, bloghumberto, leopetitpp, antranix, azolot, daninson, drumeraonline, edward.parra, greylml, areaemsono4, gaboroa14, anyeliv, jeanfred, jacowolf, daribel, slsds, moisesmcardona, jadams2k18, mursielago, ubaldonet, gabovillalba, djredimi2, onthewayout, carlosbp, adri525, steemstem, alexzicky, lemouth, mahdiyari, alexander.alexis, fancybrothers, howo, planetenamek, felixrodriguez, simplifylife, espoem, mayowadavid, erodedthoughts, enzor, pratik27, tfcoates, robotics101, sco, adetola, rharphelle, shoganaii, terrylovejoy, kingabesh, anyes2013, cryptoitaly, effofex, de-stem, yann85, temitayo-pelumi, astrophoto.kevin, anarchyhasnogods, justtryme90, mountain.phil28, deutsch-boost, biomimi, lafona-miner, zest, borislavzlatanov, thevenusproject, laylahsophia, the-devil, utopian-io, foundation, himal, star-vc, lamouthe, rachelsmantra, nitesh9, kerriknox, mathowl, saunter, saunter-pl, steem-hikers, event-horizon, florae, gra, rjbauer85, kryzsec, amavi, dber, blessing97, kenadis, carloserp-2000, mountainwashere, hadji, fredrikaa, dysfunctional, ksolymosi, ertwro, juanjdiaz89, churchboy, lesshorrible, zeeshan003, physics.benjamin, sakura1012, alexdory, samminator, pearlumie, chloroform, ugonma, dexterdev, akeelsingh, suravsingh, whileponderin, mrbreeziewrites, masterwriter, joelagbo, spederson, eurogee, kelos, aamin, steepup, vanessahampton, iamphysical, gabybarboza, henjos,