【发布时间】:2017-08-25 16:56:31
【问题描述】:
什么是一种节省时间和空间效率的算法,用于将离散的整数范围(比如区间 I1 [A..B],其中 B>=A)线性映射到另一个更大的整数范围(比如区间I2 [C..D] 其中 D>=C)?
这里简单表示,第二个范围I2的大小被限制为大于或等于第一个范围I1,即D-C >= B-A。
因此,I1 中的每个整数都映射到 I2 中包含的一个或多个对应整数的集合(因为 I2 的大小大于 I1 的大小)。相反,I2 中的每个整数都映射回 I1 中唯一的对应整数。
所以有两种期望的算法,它们在两个提供的整数区间的域中运行:区间 I1 [A..B] 和区间 I2 [C..D](其中 B>=A 和 D>=C 并且D-C >= B-A)
算法 A1:给定 I1 中包含的整数 X,计算 I2 中相应的线性映射整数集。将此表示为 A1(I1,I2,X) = [M..N],其中 [M..N] 是 I2 的子区间。
算法 A2:给定区间 I2 中包含的整数 Y,计算 I1 中的单个对应整数。将此表示为 A2(I1,I2,Y) = X。
算法 A2 必须是 A1 的对称逆。即对于 I1 中的所有 X:A1(I1,I2,X) = [M..N],那么对于 [M..N] 中的所有 Y:A2(I1,I2,Y) = X
显然,由于此问题仅限于整数,因此映射可能不是完全线性的。例如,如果 I1 包含三个整数 [1..3],而 I2 包含四个整数 [4..7],则 I1 中的两个整数将在 I2 中具有单个映射,并且 I1 中的第三个整数将具有I2 中的两个映射。 I1 中具有两个映射的特定整数无关紧要。重要的是,算法 A1 选择具有两个映射(Y 和 Y+1)的整数 (X),然后算法 A2 必须将这两个相同的 Y 值映射回 I1 中的原始 X。
算法 A1 和 A2 应尽可能创建从 I1 到 I2 的最线性映射。换句话说,如果区间 I1 的大小为 J,而区间 I2 的大小为 K(记得 K>=J),那么 I1 的每个整数要么具有 TRUNC(K/J) 映射,要么具有 TRUNC(K/J)+1 映射进入 I2。
算法应该占用常量空间,因此由一组可能使用截断整数除法和模运算以及其他基本数学函数的代数方程组成。换句话说,算法不能为需要空间来将每个映射存储在表中的映射创建表,因为整数间隔的大小可以达到 2^64。
编辑:例如,假设区间 I1 = [0..2] 和区间 I2 = [0..4]。一种正确的解决方案可能是:
Algorithm A1 Algorithm A2
X=0, Y=[0..1] Y=0, X=0
X=1, Y=[2..3] Y=1, X=0
X=2, Y=[4] Y=2, X=1
Y=3, X=1
Y=4, X=2
另一个同样正确的解决方案是:
Algorithm A1 Algorithm A2
X=0, Y=0 Y=0, X=0
X=1, Y=[1..2] Y=1, X=1
X=2, Y=[3..4] Y=2, X=1
Y=3, X=2
Y=4, X=2
一个不正确的解决方案是:
Algorithm A1 Algorithm A2
X=0, Y=[0..1] Y=0, X=0
X=1, Y=[2..3] Y=1, X=1
X=2, Y=[4] Y=2, X=1
Y=3, X=2
Y=4, X=2
上述解决方案不正确。尽管 A1 确实将 [0..2] 线性映射到 [0..4],并且 A2 确实将 [0..4] 线性映射回 [0..2],但问题是 A2 不是 A1 的逆.例如,对于 X=0,A1(0) 的值之一是 Y=1,但 A2(1) 给出 X=1(而不是原始值 0)。
【问题讨论】:
-
Y = C + (X - A) * (D - C) / (B - A), X = A + (Y - C) * (B - A) / (D - C)有什么问题? -
@Mbo 是的,这很容易,但它只为 Y 提供一个整数值,其中 Y 确实需要是一个范围,因为每个 X 值都可以映射到多个 Y 值。这在问题中有详细描述。
-
@deltamind106 区间 Y 由
C + (X - A) * (D - C) / (B - A)..C + (X + 1 - A) * (D - C) / (B - A) - 1组成。您可能正在寻找更好的答案,但我想就是这样。早点想出这样的答案,却不得不离开。 -
我必须澄清一下:映射的整数是否必须是一个连续的区间,或者它们是否可以分布在整个 A2 的范围内。
-
@Prune 这是一个我没有想到的有趣想法。最初的想法是 A2 会产生一个连续的间隔,但分布可能是可行的....我不确定(我们试图解决的问题是密码学领域)。
标签: algorithm math integer discrete-mathematics