for U_{i-1} in the layer[i-1]: Gamma := G - U_{i-1} for W in the layer[i]: if U_{i-1} is contained in W: Gamma -= W while Gamma is not empty: choose g from Gamma if gU_{i-1} = U_{i-1}g and g^p in U_{i-1} for some prime p: U := <U_{i-1}, g> add U to layer[i] Gamma -= U else: Gamma -= {g}
然而我们注意到在上述代码当中有这么一步 的判断,什么时候上述判断为假呢?
于是我们自然而然地想到应该事先把 限定在 的正规化子当中:
算法 2
1 2 3 4 5 6 7 8 9 10 11 12 13
for U_{i-1} in the layer[i-1]: Gamma := Normalizer(U_{i-1}) - U_{i-1} for W in the layer[i]: if U_{i-1} is contained in W: Gamma -= W while Gamma is not empty: choose g from Gamma if g^p in U_{i-1} for some prime p: U := <U_{i-1}, g> add U to layer[i] Gamma -= U else: Gamma -= {g}
并且我们暂时不加说明地给出计算正规化子的方法(跟前面的代码高度相似)
1 2 3 4 5 6 7 8 9 10 11
func findNormalizer(): H := U Gamma := G - U while Gamma is not empty: choose g frome Gamma if gH = Hg: H = <H, g> Gamma -= H else: Gamma -= Hg return H
for U_{i-1} in the layer[i-1]: Gamma := Normalizer(U_{i-1}) - U_{i-1} Gamma := Intersection(Gamma, z_generator) for W in the layer[i]: if U_{i-1} is contained in W: Gamma -= W while Gamma is not empty: choose g from Gamma if g^p in U_{i-1} for some prime p: U := <U_{i-1}, g> add U to layer[i] Gamma -= U else: Gamma -= {g}