《冥王星沉浮记》不只描绘了一段兴趣横生的往事,也不只记载了一段科学发现的前史,它特别期望传达这样的科学精力:勇于批评、质疑、应战陈规,坚持尽力探究。
众多的国际潜藏着太多人类不知道的隐秘,地理学因而成为一门不断更新的陈旧学科。这一刻下的地理界说,很或许鄙人一秒由于新的发现而被推翻。但咱们既不能由于不肯更改已了解的旧常识而回绝新的发现,又不能由于忧虑新常识再次被否定而不肯持续探究。科学的实质是对不知道国际的探究,只需应战威望,置疑前人,进行重复查验,才干推进科学的前进。
只需你仔细阅览下面的这篇文章,考虑文末提出的问题,严厉依照 互动:你的答案 格局在谈论区留言,就有时机取得奖品!
作者:Patrick Honner
翻译:Nuor
审校:重光
跟你核算乘法的办法不同,核算机运用了更快的乘法算法。
本年夏天,热榜上被一个简略的数学问题刷屏:8÷2(2+2)=?
假定先用8除以2你会得到16;假定先用2乘(2+2),会得到1。所以,那个成果是对的?这个问题的不合很大以至于上了纽约时报的新闻。正如部分谈论所言,即使是专业的数学家也无法将这两者一致。
问题的关键是咱们怎么了解除法的意义。“÷”意味着其效果于后边的一位数字仍是后边的一切数字与符号?关于数学家们来说,由于他们不常运用这个运算,所以这个不是很重要。假定让他们解这个问题,他们或许仅仅将其视为一个乘法运算,一旦将其写为:
不合就消失了,成果清楚明了。作为一个乘法问题,这个问题不会呈现什么其他问题。
可是数学家们发现的有关乘法的风趣的工作或许会使你惊奇:核算乘法最好的办法是什么?
假定让你来核算25乘以63。假定你跟大多数人相同的话,你或许翻开你的核算器来运算。可是假定你手头上找不到的话,你或许会用你在小学学到的数的根本运算来核算:用一个数乘以两位数然后另一个数乘以两位数终究相加得到成果:
假使你拿手心算的话,你或许运用乘法分配律来使运算愈加简略:
这两种办法都能给出正确的成果,可是哪种办法更好?或许这仅仅个人的挑选。可是至少有一种能够客观比较乘法运算的办法——功率。关于不同的状况,不同的人,功率的意义都不相同,从核算机的视角考虑问题的话,运转乘法需求多久?
评价核算机算法功率是很杂乱的,但咱们能够依据两个假定运用一种简略的办法来评价。第一个假定是:两个大数的乘法总能够分解为一系列小的数的乘法和加法运算。第二个假定是:对大多数核算机而言,小的数的加法比乘法运算快许多。所以当评价乘法算法的功率时,咱们最关怀的是小的数的乘法运算。
考虑到功率,从头来看25×63的乘法运算。为了运用规范算法来核算25×63,咱们能够履行四个小的乘法:3×5,3×2,6×5,6×2,小的乘法给出的额四个成果是:15,60,300,1200,加起来是1575。需求留意的是,运用规范算法,3×2其实是3×2×10=60,6×5其实是6×10×5=300,6×2其实是6×10×2×10=1200。可是,考虑到算法的功率,核算时不考虑10的效果。核算机的乘以10的操作跟人是相同的,只需求将数字全体左移动一位,同理,乘以100,1000也是相同的道理。
因而,咱们核算25×63只需求四个小的乘法和一些加法。乘法分配律呢?
在核算25×60时,需求用2和5乘6,在25×3时,需求用2和5乘3,仍然是四个小的乘法。由于两种办法都需求四个小的乘法,因而在功率上,他们是等价的。因而,规范的乘法运算仅仅乘法分配律的一个运用,这家常便饭。让咱们来看看原因。
考虑两个随机的两位数的乘法‘AB’和‘CD’。这儿用单引号里的符号代表一个数:‘AB’的十位数是A,个位数是B。另一方面来说,‘AB’是10A+B,意味着,假定‘AB’为25的话,A是2,B是5。假定‘CD’是63的话,C是6,D是3。
为了求解‘AB’和‘CD’的乘积,需求两个数字相乘:10A+B和10C+D。咱们能够经过两次乘法分配律来核算:
假定咱们用规范的乘法运算来核算的话,进程相似于这样:
值得留意的是,一切规范的乘法运算的过程都相似,所不同的是它们的次序不同。就功率而言,在这种状况下都有相同的乘法部分:3×5,3×2,6×5和6×2。因而这两个办法在实质上是相同的。每种办法都要做:A×C,A×D,B×C和B×D的过程。这四个小的乘法界说了乘法功率的极限。
可是1960年,俄罗斯的数学家阿纳托利·卡拉苏巴发现了别的一种极限,运用他自己的分配率找到了另一种愈加高效的乘法办法。卡拉苏巴留意到,核算‘AB’和‘CD’的乘积所需的一切四个小的乘法都是在咱们将它们的数字之和‘A+B’和‘C+D’相乘时呈现的:
这四个小的乘法之和不是咱们所求的成果,可是卡拉苏巴能够运用其得到咱们的成果。
卡拉苏巴在核算‘AB’בCD’时,首要核算两个小的乘法:A×C和B×D。这是终究成果的百位数(A×C)和个位数(B×D)。(这儿或许有加法进位,可是记住,加法比乘法快许多。)不考虑加法进位,就得到咱们想得到的四项中的两项:
完结整个乘法运算,需求:
所以还需求10(A×D)和10(B×C)。卡拉苏巴聪明的小技巧就能够用上了。咱们能够从头排列下式:
得到:
咱们需求核算的10(A×D)+10(B×C)和10(A×D+B×C)相同,所以能够在上式左右两头乘以10得到:
乍一看,这个好像并没有很大的改进,咱们仅仅把有两个乘法的运算:10(A×D+B×C)变成三个乘法的运算:10((A+B)×(C+D)-A×C-B×D)。可是卡拉苏巴终究的意图是使得核算变得愈加简单,愈加高效。办法的关键是咱们不需求再次核算A×C和B×D:这些是之前现已算过了的,是已知的!
前面咱们用两个小的乘法——A×C和B×D以及一个小的乘法(A+B)×(C×D)——来代替A×D和B×C。这代表咱们能经过三个小的乘法:A×C,B×D以及(A+B)×(C+D)来核算‘AB’בCD’。
怎么更快地核算大数的乘法
传统的25×63核算:需求四个个位数的乘法以及一些加法。
卡拉苏巴的办法:需求三个个位数的乘法以及一些加减法。
乘法的功率
跟着数字标准的添加,卡拉苏巴的办法能够不断重复运用,将大的数变成小的,然后节约更多的个位数乘法。
传统的乘法核算:2531×1467需求16个个位数的乘法:
卡拉苏巴的办法核算2531×1467需求9个个位数的乘法:
关于仅仅单纯地核算25×63的乘法,你或许并不想仅仅为了节约一个乘法运算而运用卡拉苏巴的办法。这个办法需求更多的加法,(A+B)×(C+D)也不是很小。(不过,想想看,A+B或许C+D的最大值也不会比个位数大多少。)重要的是,在乘以非常大的数时,比方核算机运用数字技能对隐秘信息或许灵敏信息进行加密和解密时,这些小的权衡取舍加起来就会在速度上有很大的前进。
比方说,假定咱们需求核算两个四位数的乘法,像是1234和5678。传统的核算办法需求一个数字的每一位乘以另一个数字的每一位,总共需求4×4=16次小的乘法。可是卡拉苏巴的办法能够很简单地削减这个乘法:把1234看做12×100+34,把5678看做56×100+78,运用分配律,能够得到:
这需求四对两位数的乘积,每对需求四个小的乘法。可是经过卡拉苏巴的办法,能够将两位数的乘积削减到三个小的乘法,总共是12次。而这仅是一个开端,跟着卡拉苏巴办法的进一步运用,能够削减更多的乘法过程,然后更多地节约内存。
当运用传统的办法将两位数相乘时,咱们需求n×n=n2个小数乘法(第一个数字的每个数乘以第二个数字的每个数),但运用卡拉苏巴办法能够只需求大约n1.58个乘法。跟着数字的增多,这两种办法的差异越来越大。用传统的办法乘以两个10位数需求10×10=100的小的乘法,可是卡拉苏巴只需求101.58=38个小的乘法,削减了62%的运算。关于两个100位的数字,分别是1002=10000和1001.58≈1445,运算削减了85%!
在算小数时,你或许不会运用这种算法。可是在乘以大数时,卡拉苏巴的办法是一个很大的前进。自从1960年,卡拉苏巴敞开了快速乘法的大门之后,数学家们就运用了先进的技能比方说傅立叶改换发明了新的速度记载。这种办法将乘法的问题转化为了乘法多项式的问题,然后指向了愈加令人惊奇的更快的算法,核算机至今还在运用这种算法。这些改进在本年早些时候达到了极点,两位研究人员验证了一个近有50年前史的关于乘法的最大功率的猜测,终究处理了最快乘法的问题。
可是,你怎么做乘法运算的问题依然是敞开的。了解你的算法,挑选最适合你的算法。记住,乘法不是一种比赛,除非你想发明一个新的速度记载。
原文来历:https://www.quantamagazine.org/the-math-behind-a-faster-multiplication-algorithm-20190923/
互动问题
【互动问题:假定核算机和人的算力大幅度提高,会对你的日子发生什么影响?】
请咱们严厉依照互动:问题答案的格局在谈论区留言参加互动,格局不符合要求者无效。
截止到本周五正午12点,点赞数前三名的朋友将取得咱们送出的图书一本。
修改:aki