- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
理论上是否可能以 O(1) 的空间和时间复杂度来决定一个已知的正整数 K 是否是方程的解
其中 a 和 b 是固定的正整数(不是对方的倍数),μi 是未知 非负整数,除了有限数量的(但不是全部)都是零?如果在 O(1) 空间和时间上不可能,那么最知名的算法对空间和时间的要求是多少?
我发现解决这个问题的唯一方法是提前枚举所有可能的K的子集,但这当然需要我选择上限M 和 N 使得 i ≤ N 和∀ μi ≤ M。更糟糕的是,它的空间需求是 O(MN),这可能是如此之大以至于没有查找算法在真实硬件上达到 O(1) 检索性能。我有一种不好的预感,这实际上是 Knapsack Problem伪装,但我还没有足够的把握放弃。
我试图在空间和时间上都达到 O(1),因为我需要知道这是否可以在 CPU 或 RAM 几乎没有余量的嵌入式环境中实时完成。
我不需要知道一组令人满意的 μi 值。
编辑: 这个 Python 函数计算一个集合对象 S
使得 K in S
为真当且仅当 K 是上述等式的解之一,给定 a、b 和截止点 M 和 N 如上所述。
def compute_set(a, b, M, N):
ss = [a*i + b for i in xrange(1,N+1)]
aa = itertools.product(xrange(0,M+1), repeat=N)
rv = set(map(lambda a: sum(a[i]*ss[i] for i in xrange(N)), aa))
rv.remove(0)
return rv
最佳答案
分两个阶段求解。
在第 1 阶段,使用处理 Diophantine equations 的标准技术计算集合 {(x, y): x, y in Z and ax + by = K} 的描述.让 g = gcd(a, b);除非 g 除 K,否则没有解决方案。通过 extended Euclidean algorithm 计算 g求解 ax' + by' = g 以及计算 g;第一个解是 (x', y') * K/g。其他解与 (-b/g, a/g) 的整数倍相加。
在第 2 阶段,计算可以通过 µi 的不同选择实现的 (x, y) 解的描述。由于 K ≥ 0 我们知道 y ≥ 1 是必要条件。如果 n 是一个变量,那么 x ≥ 0 和 y ≥ 1 是充分必要条件(设置 µ0 = y - 1 和 µx = 1 和所有其他微秒到 0)。
如果 n 是一个参数,那么事情就有点棘手了。使用阶段 1 的结果,找到 x ≥ 0 且 y 最大值的解 (x, y)(如果没有这样的解,则 K 不可行)。对于这个解决方案,检查是否 x/y ≤ n。
def egcd(A, B):
"""Returns a triple (gcd(A, B), s, t) such that s * A + t * B == gcd(A, B)."""
a, b, s, t, u, v = A, B, 1, 0, 0, 1
while True:
assert s * A + t * B == a
assert u * A + v * B == b
if not b:
break
q, r = divmod(a, b)
a, b, s, t, u, v = b, r, u, v, s - q * u, t - q * v
return a, s, t
def solvable(K, a, b):
g, s, t = egcd(a, b)
q, r = divmod(K, g)
if r:
return False
x, y = s * q, t * q
assert a * x + b * y == K
d = a // g
q, r = divmod(y, d)
if r <= 0:
q -= 1
r += d
assert 0 < r <= d
x, y = x + q * (b // g), r
assert a * x + b * y == K
return x >= y
关于algorithm - 判断一个数是否满足欠定方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8424658/
在我的一门类(class)中,我接到了一项家庭作业,要求我们在谷歌上搜索 Metapost 语言并找到该语言中方程求解功能的用途。 在浏览了 Metapost 用户手册的前十多页后,我发现只有一个原因
你能帮我在 this page 上的谷歌图表上隐藏趋势线上的工具提示(方程)吗? ? 谢谢 以下是我正在使用的图表选项: var options = { title: 'Weight
我正在尝试将 TeXWorks 编辑器配置为使用与 TeXMaker 相同的语法着色。但是,TexWorks 使用正则表达式来指定应该着色的内容。不幸的是,它没有数学的默认设置。 我想匹配 $ 之间的
我刚开始玩 GHCi。我看到列表生成器基本上解决了给定集合中的方程式: Prelude> [x | x [0.01,0.2..2.0] [1.0e-2,0.2,0.39,0.580000000000
是否有可以使用的图形表达式生成器或方程编辑器的 Java 开源实现? 最好有在线演示,或者至少有屏幕截图。 最佳答案 取决于方程的类型。 如果您正在考虑简单的多项式,您可以尝试 Java Expres
我有四个文本输入字段,在用户输入相关值后,我必须进行 JavaScript 计算以将它们全部相加 我使用: var total = Number(value1) + Number(value2) +
为什么这段代码有两个不同的输出(GCC 4.5.1)(我已经评论了重要的行): int main() { bool a = 1; bool b = 1; bool c = 1;
如果标题含糊不清,我深表歉意,但我不知道如何为我的情况命名。我正在为使用 GPS 的 iPhone 编写一个应用程序。在 didUpdateLocations: 方法中,我针对任意大小的变量测试位置的
我正在尝试计算表中学生的 BMI,四舍五入到三位数: +-------+--------+--------+ | fname | weight | height | +-------+--------
我们可以使用 deSolve R 中的常微分方程 (ODE) 包,但是,我找不到解决两个嵌套 ODE 方程的方法,假设` b'(t) = beta - k*b(t); a'(t) = alpha -b
我有一个 boolean 方程,想简化它。帮忙解决一下。 bool needLoad = isA || (!isA && !isB); 之后我使用 if (needLoad){ if (
我很感兴趣,建模工具(在我的例子中是 OpenModelica 和 Dymola - 建模语言 Modelica)如何求解方程组(线性和/或非线性)。这些工具专为求解微分代数方程而设计。我知道一点将微
Julia:当我有绘图时如何找到最佳拟合曲线/方程?我有一个用 map 绘制的图,但我需要找到一个适合它的二次方程? 最佳答案 正如评论中所说,有一个情节在这里并不真正相关;只有数据本身是。您可以使用
我一直在尝试将像 100, 45 这样的输入放入文本框中,并通过单击按钮通过我的方程式运行它,但我不知道该怎么做。单击按钮后,它应该发布答案作为警报。请帮忙。谢谢。 function Rad(a, b
Julia:当我有绘图时如何找到最佳拟合曲线/方程?我有一个用 map 绘制的图,但我需要找到一个适合它的二次方程? 最佳答案 正如评论中所说,有一个情节在这里并不真正相关;只有数据本身是。您可以使用
有人可以向我解释为什么下面的代码会打印字符“u”吗? int p = 9; int q = 5; int r = p - q; double x = p; double y = q; St
我想以某种方式缩短我的 ODE 方程,因为否则代码会变得困惑。我尝试过使用辅助函数,例如这里的 fe() ,但这不起作用。下面的代码只是一个例子,欢迎任何建议!谢谢! # Import the req
我无法创建正确的文件。程序中的方程不会迭代,它只会根据请求的数量写入相同的总和。 for 循环。 #include #include #include #define LEN 256 int m
我有 2 个指向一些 Point 结构的指针。我想计算两点之间的距离(我不需要计算它的根)所以我有这个: w[0]=X[l]; w[1]=X[l+1]; d=m(w[0]->x
我有一个具有 CSV 上传功能的网站,它将 CSV 中的所有内容推送到临时表,然后分成较小的表。 目前,我有一个显示页面,在 HTML 表格中显示所有这些信息。然而,有些部分需要有公式化的表示。换句话
我是一名优秀的程序员,十分优秀!