作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图了解摊销的复杂性并在网上进行了几次搜索,但我还找不到好的资源。
那么谁能解释一下什么是摊销复杂度以及它如何在 splay 树中每个操作变为 O(lg n)?
最佳答案
对伸展树(Splay Tree)执行的任何操作,无论是插入还是删除..等等,成本都由展开操作决定。因此只考虑展开操作的成本,即在要展开的节点上执行的旋转。
The amortized function is given by a=c+3Rfinal(v)-3Rinitial(v)
其中 a 是摊销成本,c 是实际成本,Rfinal 是展开操作后的等级,Rinitial 是旋转前节点的等级。(任何节点的等级由其子树的高度给出,即 log |S| 其中 S 是其下的节点数)
现在考虑要展开的节点是叶子的最坏情况,因此其初始等级由 0 给出。将其展开到顶部后,即作为根节点,其等级变为 log n,其中 n 是树中节点的总数。
a<= 2+3logn-0
O(logn).
关于algorithm - 什么是 splay 树中的摊销复杂性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19720479/
我只是想在继续之前向某人确认我走在正确的轨道上。问题指出,当我想向已经满的数组添加新元素时,我必须“在 O(1)(amortized) 中扩展数组”。 这是不是说每次我将一个新元素插入到完整列表中时,
我试图从复杂性的角度更好地理解哈希表和字典在 C# 中的工作方式(但我想语言不是一个重要因素,这可能只是一个理论问题)。 我知道如果 Count 小于容量(这有点明显)。 不过,让我们看看这段代码:
我是一名优秀的程序员,十分优秀!