- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在阅读有关 splay 树的文章时,我在维基百科中发现了一些关于 splay 节点“X”等级和摊销成本的表达方式。它被给出为,{我们可以通过以下方式限制任何 zig-zig 或 zig-zag 操作的摊销成本:
amortized cost = cost + P(tf) - P(ti) ≤ 3(rankf(x) - ranki(x)),
其中x是向根移动的节点,下标“f”和“i”分别表示操作前后。当对整个 splay 操作求和时,这会伸缩到 3(rank(root)),即 O(log n)。由于最多有一个 zig 操作,因此这只会添加一个常量。
我无法解释这个。请有人详细解释以上内容。如果可能的话,举一些例子。
请提供一些解释其他splay树定理的链接
谢谢
最佳答案
您想对静态伸展树(Splay Tree)进行简单的摊销分析。如果你像维基百科上的例子那样采用一个基本的之字形。这是最坏的情况。你有:
P(tf) - P(ti) ≤ 3(rankf(x) - ranki(x))
证明:使用维基百科上使用的符号,因为转换后 x 在树的根部,你很容易得到:
rankf(x)>= rankf(g) 和 rankf(x)>= rankf(f)
因此,
ptf = rankf(x)+rankf(g)+rankf(p) <= 3*rankf(x)
在转换之前用 x 进行相反的推理:
Pti = ranki(x)+ranki(g)+ranki(p) >= 3*ranki(x)
您可以将其推广到整个操作以计算摊销成本。
我猜它证明了你的结果,但我不确定这是否是你要找的。
关于algorithm - 伸展树(Splay Tree)的摊销成本 : cost + P(tf) - P(ti) ≤ 3(rankf(x) - ranki(x)) explanation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6275348/
我有一个加权图,没有负权重,我想找到从一个节点到另一个节点的路径,试图最小化单个步骤的成本。我不需要最小化旅行的总成本(例如 Dijkstra 所做的),而是最小化平均步骤成本。但是,我有一个约束:K
我想使用 BigQuery 托管其他人可以查询的数据集,而不会对我的项目产生处理费用。我了解当我将数据集上传到项目时,存储成本与项目相关。我希望其他人能够发现我的数据集,通过 访问它他们的项目/帐户(
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
如果我们使用任何连接池框架或 Tomcat JDBC 池,那么打开和关闭数据库连接的成本是多少? 每当需要进行数据库操作时频繁打开和关闭数据库连接是一个好习惯吗? 或者同一个连接可以跨不同方法进行数据
如果我们使用任何连接池框架或 Tomcat JDBC 池,那么打开和关闭数据库连接的成本是多少? 每当需要进行数据库操作时频繁打开和关闭数据库连接是一个好习惯吗? 或者同一个连接可以跨不同方法进行数据
就软件而言,运营成本高昂或资源成本高昂是什么意思。当我遇到一些文档时,他们提到了诸如每次打开文件都是一项昂贵的操作之类的内容。我可以有更多这样的例子(数据库连接是一项昂贵的操作,线程池是一个更便宜的操
我的 redux 状态中有一个数据,大约有 100,000 个 json 记录(每个记录都有大约 8 个键值对)。 我在客户端编写了一个逻辑,每 30 秒刷新一次此数据(每 30 秒我调用服务器以获取
当我的应用程序启动时,我用我的 fragment 首选项中的值填充了一个容器类。我的想法是处理 SharedPreferences 和 PreferenceManager 一次,因为我猜它们很重。 这
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: How expensive is it to dereference a pointer in C++? 如果
我们如何解释 WEKA 中的成本矩阵?如果我有 2 个类要预测(第 0 类和第 1 类)并且想要将第 0 类的分类惩罚为第 1 类(比如惩罚加倍),那么矩阵格式究竟是什么? 是吗 : 0 10 20
我想通过以下方式保护对资源的访问: 所有线程都可以并发读取,更新期间除外(如果更新不是原子的)。 只能给一个线程分配更新任务,直到下一次需要更新。 这似乎是一个使用适当的 lock 或可能使所有操作成
我想知道是否有 (N) 个双 vector ,每个 vector 的长度都很大,例如 10,000,并且我想通过创建 (N) 个线程来对操作进行线程化(每个 vector 乘以 3)。 我想知道使用并
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
假设我们有一个数据库类(在 PHP 中——但它应该与任何语言相关),它在每次有查询时打开到 MySQL 服务器的连接。有些脚本会在每次执行时查询一次数据库,有些会查询两次,在同一次执行中最多可能有 4
我正在编写一个软件,其中有一部分处理读写操作。我想知道这些操作对 csv 文件的成本有多大。还有其他消耗时间更少的文件格式吗?因为我必须在每个周期结束时写入和读取 csv 文件。 最佳答案 读写操作取
我正在学习 C 并且对我在网上阅读的内容感到困惑。 在 http://www.cs.bu.edu/teaching/c/stack/array/ 我可以阅读: Let's look at the fu
我下学期要参加 comp 2210(数据结构),我一直在做在线发布的夏季学期的作业。到目前为止,我在做作业时没有遇到任何问题。看看下面的作业 4,看看你是否能给我一个关于如何处理它的提示。请不要提供完
我需要在页面上放置一个大约 20 个 Vue 组件。每个组件在挂载时都会为自己创建一个 onSnapshot,相应地,当它被删除时会创建一个 unsubscribe()。 const ref = fi
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: How costly is .NET reflection? 我目前的编程心态是反射是我最好的 friend
我刚刚开始掌握 Go(两天前开始,写了不到 1000 行),我还在想一些习语。 我需要按长度降序对一段字符串进行排序。我确实喜欢这样: func ... { ... do business .
我是一名优秀的程序员,十分优秀!