在我看来,j 在这里有多种独立用途。这是典型的由数学家撰写的 CS 文本,他们 - 你可能会惊讶地发现 - 通常对他们的符号非常草率,期望读者从暗示和上下文中看到所有种类的东西.
在第一段中,作者使用V[j] 来引用数组的任意元素20 元素向量(并且j 确实从零开始) .他们正在定义如何从一维随机数流中填充这个固定宽度向量数组(您可能会觉得将其视为一个二维数组更舒服)。如果我明确地写出数组的前两行,也许会有所帮助?
V0 = (Y0, Y1, Y2, ... Y19)
V1 = (Y20, Y21, Y22, ... Y39)
⋮
Vj = (Y[j*20], Y[j*20+1], ... Y[j*20+19])
在第二段中,A[j] 又是一个数组的任意元素,但它是一个不同的、不相关的浮点数数组。
在第三和第四段中,j、j0 和j1 似乎是三个独立的索引变量,而将算法塞进散文中会使情况更加混乱。作者应该使用伪代码并选择更好的变量名。这是一个产生伪代码版本的尝试——不过,我故意保留了错误的变量名,所以你可以看到对应关系。
Algorithm_S (m, n):
# S1: Initialize.
var A: float[n+1]
var j, j0, j1: int
for j in 0, 1, ..., n:
A[j] ← 0
A[1] ← 1
# S2: Update probabilities.
j0 ← 1
j1 ← 1
repeat n-1 times:
j1 ← j1 + 1
for j in j1, j1 - 1, ..., j0:
A[j] ← (j/m)*A[j] + (1 + 1/m - j/m)*A[j-1]
if A[j] < 1e-20:
A[j] ← 0
if j = j1: j1 ← j1 - 1
if j = j0: j0 ← j0 + 1
# S3: ...
我不确定这是不是正确的,因为即使像这样打开它,它对我来说也没有多大意义。问题可能是你只引用了算法的前两个步骤,所以我不知道这个“辅助概率数组”将用于什么,我不知道代码是否应该应该 做它正在做的事情。不用担心。
总之:你很困惑,因为这本书很混乱。不是你的错。我建议你找一本不那么令人困惑的书,当你有更多的阅读数学期刊文章的练习后,也许再回到这本书。