【发布时间】:2016-08-01 02:57:14
【问题描述】:
简介:组中缀产品
假设我有一个小组
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?
【问题讨论】:
-
我不认为你可以。举个例子:如果 x(i) 之一是 0,那么对于 j>=i,所有 m(j) 都是。这使得所有索引 >=i 的预计算都无用。
标签: algorithm substring dynamic-programming monoids semigroup