简介:一组中缀产品
假设我有一个小组
G = (G, *)
和元素列表
A = {0, 1, ..., n} ⊂ ℕ
x : A -> G
如果我们的目标是实现一个功能
f : A × A -> G
这样
f(i, j) = x(i) * x(i+1) * ... * x(j)
(我们不关心如果i
>会发生什么j
)
然后我们可以通过预先计算一个前缀表来做到这一点
m(-1) = 1
m(i) = m(i-1) * x(i)
(1
右侧表示 的单位G
),然后实现f
为
f(i, j) = m(i-1)⁻¹ * m(j)
这有效,因为
m(i-1) = x(0) * x(1) * ... * x(i-1)
m(j) = x(0) * x(1) * ... * x(i-1) * x(i) * x(i+1) * ... * x(j)
所以
m(i)⁻¹ * m(j) = x(i) * x(i+1) * ... * x(j)
经过充分的重新关联。
我的问题
如果 G 只是一个幺半群,而不是一个群,我们能否挽救这个想法,或者做一些不那么糟糕的事情?
对于我的特殊问题,如果我们可以做类似G = ([0, 1] ⊂ ℝ, *)
的事情,即我们有来自单位行的实数,我们不能除以0?