我正在尝试实现Quadratic Sieve,我注意到我需要选择一个平滑度B来使用这个算法。我在网上发现B也代表exp((1/2 + o(1))(log n log log n)^(1/2))但现在我的问题是o(1)。你能告诉我o(1)代表什么?
答案 0 :(得分:6)
让我们从你的答案开始:
f(n)的定义是o(1)是limn→∞f(n)= 0。这意味着对于所有ε> 0,存在Nε,取决于ε,使得对于所有n≥Nε,我们具有| f(n)|≤ε。
或者用简单的英语:
符号o(1)表示“收敛于0的函数。”
这是一个很棒的资源:http://bigocheatsheet.com
查看渐近增长的符号部分
答案也可以在这个重复的帖子中找到:Difference between Big-O and Little-O Notation
f∈O(g)表示,基本上
对于至少一个选择的常数k&gt; 0,你可以找到一个常数a,使得不等式f(x)<0。 k g(x)适用于所有x>一个。
请注意,O(g)是此条件所适用的所有函数的集合。
f∈o(g)说,基本上是
对于每个选择的常数k&gt; 0,你可以找到一个常数a,使得不等式f(x)<0。 k g(x)适用于所有x>一个。
答案 1 :(得分:0)
O(1)表示它需要恒定的时间,不受输入大小的影响。 o(1)(略有不同!)表示它所代表的函数收敛于0。 我不会太担心平滑度,首先使用非常简单的平滑公式编写其他更复杂的算法。 (前100,000个素数,或者前n个素数,其中n = c * log(数字))一旦算法的其余部分正在工作(并且可能优化?),那么仔细选择平滑度实际上会产生显着影响。你在问题中提出的那个长期复杂的公式是二次筛分算法本身的近似(渐近)运行时间,我很确定它与选择平滑度无关。