在一本知名的算法书中看到一句话:程序的运行时间大致和n的平方成正比(因为n每扩大1倍,运行时间近似扩大4倍)。
老金忽然感觉这个表述有点不对劲,扩大1倍是原来的2倍,扩大4倍怎么会是原来的4倍吗?
老金在网上一查,才发现网上充斥着类似这样的错误言论。
比如:
①翻2倍就是变为原来的两倍,增加2倍就是原来的2倍;
②一个数扩大了两倍,它就变成了原来的两倍。
③你有三个苹果翻三倍就是3*3=9,增加三倍就是3*(3+1)=12。
④6增加两倍,等于12。6增加三倍,等于18。
老金研究后得出结论,搞定倍数问题其实只需要搞明白一点:“倍”和“番”的区别。
1.“倍”是复制,表示和原来的一样
“倍”在古代同“背”,《说文》中说:倍,反也。
为什么会有这个意思呢?因为“咅”是“否”的异体字,它们最初是一个字(他们长得是不是像?)。否定一个人就是反对这个人,就是连目光都不曾瞥过去,就是留给他的只能是背影。反,意味着对立,后来引申为对等,即和原来的一样。
所以不管是几倍,它的参照物都是原来的那一个。
用“倍”表示倍数有三种表述形式:
①是n倍。这个很简单,就表示是原来的n倍,就是有n个和a一样的东东,所以结果为n*a。
②增加n倍、多n倍、扩大n倍、涨n倍、翻n倍。这些表述统统都是一个意思,即是和原来的那一个a比较,多出n个一样的东东,所以结果为a+ n*a=(n+1)*a,即它们都会变成原来的n+1倍。
③增加到原来的n倍、扩大到原来的n倍、涨到原来的n倍。这只是第①种倍数的另一种描述。这没什么可说的,完全是语文问题。所以要知道,1个数扩大4倍即这个数是原来的5倍,扩大到原来的4倍即这个数是原来的4倍。
2.“番”是替换,表示更替的次数
“番”本来是个象形字,象野兽的脚印。你看地上的一排排脚印,都是一个左脚一个右脚轮流着来,所以“番”有“更替”的意思。它的参照物不是原来的那一个脚印,而是最新的那个脚印。而“翻”代表着“翻一倍”,二者合起来的意思就是以更替的形式翻一倍,即在前一次的基础上翻一倍。所以,翻n番就是进行n次这样的更替。
比如a翻3番:
第1次更替:将a翻一倍变为2a。
第2次更替:将2a翻一倍变为4a。
第3次更替:将4a翻一倍变为8a。
所以翻n番的结果为2^n*a
相信看到这里,你再也不会搞混倍数问题了。