algorithm - 为什么考虑 NP 而不是 P?

标签 algorithm time-complexity np

因式分解:给定一个整数 N,找到整数 1 < a,b < N,如果它们存在,则 N = ab,否则称 N 是素数。

我知道素性检验在 P 中,但为什么不分解呢?

这是我的算法:

For each a = 1 ... sqrt(N)
    if(N % a == 0)
        b = N/a
        add (a,b) to the result
    Endif
EndFor

这在 O(sqrt(N)) 中运行。

最佳答案

单个数值的输入大小,由其二进制表示的长度来衡量。准确地说,输入数值n的大小与log_2(n)成正比。因此,您的算法在指数时间内运行。

例如,假设我们正在使用您的算法对数字 N 进行因式分解。如果 N 是素数,您必须至少测试 sqrt(N) 个因子。 (或者您可以为此计算素数表,但它仍然不是线性的)。

无论如何,您测试 sqrt(N) 次。但是问题的大小定义为 S=log2(N)。所以我们有 N=2^S。因此它是 sqrt(2^S)=2^(S/2) 是指数函数。

关于algorithm - 为什么考虑 NP 而不是 P?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20074207/

相关文章:

algorithm - 弗洛伊德的循环查找算法 while checks

javascript - 识别整数数组中最长的方差周期

algorithm - 如果循环变量除/乘以恒定量,为什么我们将时间复杂度视为 O(Logn)?

java - 是否可以在 O(n) 时间内生成子数组?

computer-science - 是什么使 NP 难问题不是 NP 完全问题?

查找唯一项目集的算法,一组项目中的每一个项目

algorithm - 计算 Sprite 之间的面积

algorithm - 用于搜索/自动完成的 Elasticsearch 或 Trie?

performance - Lua:__index 作为函数与作为表的性能

algorithm - 无重复的箱子堆叠