- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在某些情况下,对问题的蛮力方法具有复杂性,在性能方面不够好。
让我们举个例子西塔(n^2)。
使用递归方法可以将其改进为 Theta(nlogn)。
显然,渐近地人们会选择使用递归方法,因为对于越来越大的输入 N,增长阶数越低,即性能越好。
我的问题如下:
如果渐近地随着 N 变得越来越大,递归(即分而治之方法)表现得更好,那么在我们递归 N 的巨大输入时忽略它是不是不现实的,我们最终可以运行堆栈不足?
由于大量的投入,我们实际上永远得不到结果。
那么,如果忽略这些细节,我们如何才能确定我们为特定问题选择了最佳算法呢?
最佳答案
可以在不使用硬件堆栈的情况下实现递归算法。如果堆栈溢出的可能性是一个严重的问题,您可以实现自己的堆栈或简单地限制递归的深度。
但是,如果算法以递归方式划分一组数据(大小为 n
),则递归次数将与 log n< 成正比
。这意味着要耗尽大小为 s
的堆栈,您需要大小为 2^s
的数据,随着 s
的增长速度非常快.人们往往不会意识到指数函数增长的速度有多快。我的观点是,使用这种类型的算法(在每个递归步骤中拆分一组数据),输入数据不太可能大到需要如此多的递归以耗尽堆栈。
编辑:但是我不是专业的程序员,所以我缺乏实践经验。
关于performance - 寻求最佳算法(渐近)并忽略其他细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7929547/
谁能证实这个算法的复杂度是 O(n^2)? a = 0 b = 0 c = n while (b <= c) { for (j = b; j<=c; j++) { a
问题(数据结构): 我们应该使用哪种表示来计算 O(|V|+|E|) 中图顶点的入度?这应该如何在 Khan 的算法中保持而不损害运行时间(渐近地)?证明您的主张。 我的尝试:我们应该使用矩阵表示来计
在某些情况下,对问题的蛮力方法具有复杂性,在性能方面不够好。 让我们举个例子西塔(n^2)。 使用递归方法可以将其改进为 Theta(nlogn)。 显然,渐近地人们会选择使用递归方法,因为对于越来越
我在 C++11 中使用 std::unordered_map。我在字符串键和复合数据类型之间做出决定(比如将两个 long 放在一个结构中以保存 UUID)。 当 hashmap 使用 std::s
它是 f(n)=theta(h(n)) 因为 theta 是可传递的。但是谁能解释为什么 h(n)=theta(f(n))。 最佳答案 通过定义扩展 Big-O 符号通常会使事情变得简单。 关于alg
我是一名优秀的程序员,十分优秀!