《具体数学》是高德纳经典著做《计算机程序艺术》的数学预备知识部分的深化和拓展。html
咱们先看一道题,ide
一个娱乐场里面,有一个轮盘赌局,轮盘上有编号为1到1000的1000个槽。若是一次旋转小球落在的槽里的数字$n$知足$\lfloor\sqrt[3]{n}\rfloor|n$,则娱乐场付给咱们5元,不然咱们损失一元。若是咱们玩这个游戏,会不会有但愿赢钱。函数
其中$\lfloor\sqrt[3]{n}\rfloor|n$表示$\sqrt[3]{n}$的下取整能整除$n$,即$n$能够表示成$\lfloor\sqrt[3]{n}\rfloor|n$的整数倍。this
通常此类有关输赢的问题,都是要回答两个问题:idea
用这样的思路思考这道题,就是要计算赢钱的几率和指望。假设1000个数出现的概率相等,那么获胜的几率就是1000个数里知足条件$\lfloor\sqrt[3]{n}\rfloor|n$的个数$W$除以1000,能够获得计算指望的公式以下设计
$$\frac{5W-(1000-W)}{1000}$$ 如今问题转化成求解从1到1000能知足$\lfloor\sqrt[3]{n}\rfloor|n$的数字有多少个?htm
咱们怎么计算呢?blog
若是n是个小的数,咱们能够经过枚举很快的计算获得。但1000不算小。这个问题包含了这本书的几个知识点,答案$W=172$,具体解答放在下一篇文章里。递归
本书一共有九章内容,分别为:游戏
"Kenneth E.Iverson introduced a wonderful idea in his programming language APL, and we'll see that it greatly simplifies many of the things we want to do in this book. The idea is simply to enclose a true-or-false statement in brackets, and to say that the result is 1 if the statement is true, 0 if the statement is false. "
上面的意思就是用[statement]来表示1和0,举个例子以下,
$$[P是素数]=
\begin{cases}
0& \text{p is not prime}\\
1& \text{P is prime}
\end{cases}$$
Iverson 标记能够在把\(\sum\)的上下标中的条件给去掉,表示成更容易理解的形式(对Iversion标记熟悉后很方便)求和\(\sum\)均可以写成以下的形式
\(\sum_k{a_k}[P(k)]\)
若是P(k)为假则\(a_k[P(k)]\)这一项为0,因此,以上的求和把全部知足条件的项都包含进去了。使用这样的标记方法,可让咱们更简单方便的操纵求和的上下标。
例如,全部的偶数求和常规的表示形式是$\sum_{k}{2k},使用Iverson记法能够表示成 $$\sum_{j=1}{k[k=2j]}$$
在某些时候通过这样变换的指标让咱们更加清晰的看清关系,书上的一个变换例子以下
原文首发于博客园 Hall Of FAME