给定和,
我的问题是:
给定
- 假设我们可以决定在,是有决定的任何方式,而无需预形成的乘法(或分割),和。还是有某种证明是不可能的。
- 有没有一种比分母相乘更快的方法来比较有理数。
给定和,
我的问题是:
给定
Answers:
我目前的研究:
可以尝试制定一些一般规则来解决有理比较:
假设所有正数:
另一个规则:
从这里开始,我们将假定,因为否则我们可以使用上述规则来解决它,或者将问题反转为,无论如何我们都会遇到这种情况。Ç
规则: 这规则基本上指出,您始终可以从分母中减去分子,并将结果设置为分子,以获得等价问题。我将省略证明。
此规则允许您从等效分子的右分子和分母中减去左分子和分母。
当然有伸缩性:
使用这些规则,您可以玩弄事物,以巧妙的组合反复应用它们,但在某些情况下数字接近且具有病态性。
通过应用前面的规则,可以将所有这些问题减少为:
有时您可以立即直接解决此问题,有时则不能。病理病例通常为以下形式:
然后,将其翻转,得到的结果相同,只差一点点。规则+翻转的每次应用都会将其减少一位/位。AFAICT,除非您在病理情况下应用次(每个数字/位一次,就不能快速解决它,而否定了它们的明显优势。
我意识到这个问题似乎比当前的一些开放性问题更难。
一个更弱的问题是确定:
但更弱:
这是验证乘法的未解决问题。它较弱,因为您是否可以确定,那么您可以轻松确定,通过使用算法测试两次,,。如果其中一个是正确的,则您知道。
现在,是一个开放的问题,至少在1986年是这样:
乘法和除法的复杂性。让我们从非常简单的等式ax = b开始。当考虑整数时,可以通过除以零的整数除法来测试其可溶性并找到解x。对于检查给定的解x,整数乘法就足够了,但是是否存在更快的验证方法是一个有趣的开放问题。
非常有趣的是,他还提到了验证矩阵乘法的问题:
一个有趣的问题是矩阵乘法的验证,即检查给定C的AB = G是否可以更快地完成。
此问题已得到解决,并且确实有可能使用随机算法在时间内进行验证(其中是输入矩阵的大小,因此它基本上是线性时间)。输入的大小)。考虑到唐津整数乘法与之后的矩阵乘法算法的相似性,我不知道是否有可能将整数乘法简化为矩阵乘法,尤其是在它们的相似性上。然后也许可以通过某种方式利用矩阵乘法验证算法进行整数乘法。
无论如何,据我所知,这仍然是一个开放的问题,更重要的问题肯定已打开。我很好奇,如果解决相等性验证问题是否会对比较不平等性验证问题产生影响。
我们的问题的一个小变化是,如果保证将分数减小到最低限度;在这种情况下,很容易判断。这对减少比例的比较验证有影响吗?
一个更微妙的问题,如果我们有一种方法可以测试,这会扩展到测试?我看不到您如何像那样使用这两种方式。
有关:
他们在近似乘法和随机验证方面做了一些工作,我对此并不完全了解。
有众所周知的算法,可以将n位数字与O(n log(n)log(log(n)))复杂度相乘。而且我们不能做得比O(n)更好,因为至少我们必须查看整个输入。我的问题是:对于一类合适的“不确定性”算法,我们实际上可以达到O(n)吗?
更准确地说,是否有一种算法可以接受两个n位二进制数“ a”和“ b”以及一个2n位二进制数“ c”,并在O(n)时间内告诉您“ a * b = c”?如果不是,是否还有其他形式的证书C(a,b,c),以便算法可以使用它在线性时间内测试产品?如果不是线性时间,那么测试产品的问题至少在渐近程度上比计算问题容易吗?这些方面的任何已知结果都将受到欢迎。
约翰。
―johnh4717
这是一个非常不全面的尝试。假设我们只能在决策器中使用(恒定数量的)加法和减法,以及恒定数量的 wrt预定义数字。换句话说,我们可以在器中执行恒定数量的,等。那么我们唯一可以计算的量的形式为其中是预定义的常数。注意,可以在时间计算。
编辑 该决策者旨在确定 iff。考虑以作为。钻头由其在表面位置决定,该表面是4维双曲面。如果我们在输入空间中有一个点,则上面的决策器可以计算在该输入点的有限距离内的点,即那些点等。这定义了4 d空间中的长方体。
(如何使其更精确?)从长方体到曲面的距离通常是无界的,因此决定者无法计算曲面
好问题。您会接受置信度吗?
也许做近似除法。即
要计算a / b的边界近似商,请右移a ceil(log_2(b))并同时右移floor(log_2(b))。然后我们知道准确的商在这两个值之间。
然后,根据这四个整数的相对大小,一个人可以排除某些情况,并获得100%的置信度。
可以对除2以外的基数重复该过程,并通过一系列这样的操作来增加置信度,直到以某种方式观察到符号/抢七的变化?
这是我的一种方法的初稿。
有什么方法可以确定ad <cb而不必执行[昂贵]乘法
当然。
想法:逐位比较十进制扩展。
唯一令人讨厌的一点是,我们必须首先排除平等,因为否则我们可能不会终止。
首先比较整数部分很有用,因为这很容易。
考虑一下:
def less( (a,b), (c,d) ) = {
// Compare integer parts first
intA = a div b
intC = c div d
if intA < intB
return True
else if intA > intB
return False
else // intA == intB
// Normalize to a number in [0,1]
a = a mod b
c = c mod d
// Check for equality by reducing both
// fractions to lowest terms
(a,b) = lowestTerms(a,b)
(c,d) = lowestTerms(c,d)
if a == c and b == d
return False
else
do
// Compute next digits in decimal fraction
a = 10 * a
c = 10 * c
intA = a div b
intC = c div d
// Remove integer part again
a = a mod b
c = c mod d
while intA == intC
return intA < intC
end
end
}
注意,do-while
循环必须终止,因为数字不相等。但是,我们不知道它运行了多长时间。如果数字非常接近,则可能需要一段时间。
显然,没有昂贵的乘法。我们唯一需要的就是将提名人乘以。特别是,我们避免了显式计算 和。
这样快吗?可能不会。有很多整数除法,模和gdc
s可以计算,并且我们有一个循环,其迭代次数与我们比较的数字之间的距离成反比。
辅助方法:
def lowestTerms(a,b) = {
d = gcd(a,b)
if d == 1
return (a,b)
else
return lowestTerms(a div d, b div d)
end
}