- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在阅读各种文本编辑器背后的数据结构,并有几个问题。
如果我理解正确,在 Piece Table 上搜索/遍历是 O(n),因为您需要一个接一个地遍历链表,而 Rope 只需要 O(logn) 时间,因为它是一个平衡的二进制结构树。
那怎么进来this stackoverflow answer和 this IBM article ,它声称“插入几乎成为恒定时间操作”并且“在大多数数据处理中在例程中,顺序访问绳索的字符是必需的,在这种情况下,绳索迭代器可以提供摊销的 O(1) 访问速度”。我在这里错过了什么吗?他们不应该都是 O(logn) 因为他们需要先找到叶子的位置吗?
欢迎所有反馈/答案!干杯!
最佳答案
你问了两个问题:
Q1。如何“插入成为几乎恒定时间的操作”?
A1。因为有些人认为 O(log n) 是“几乎恒定的时间”。你可能不同意那些人。
Q2。如何“顺序访问绳索的字符是所需要的,在这种情况下绳索迭代器可以提供分摊的 O(1) 访问速度”?
A2。顺序访问不同于搜索。您假设“在 Piece Table 上搜索/遍历是 O(n),因为您需要一个接一个地遍历链表,而 Rope 只需要 O(logn) 时间”,但是该语句将两个操作(搜索和遍历)混为一谈具有不同的访问成本。
遍历一个数据结构至少需要 Ω(n) 的时间,因为你必须遍历每个元素。另一方面,对于某些数据结构,搜索 可以是 O(1)。
现在我们已经理清了这一点,让我们检查一下您提出的问题:“顺序访问 ... 分摊 O(1)”是什么意思?这意味着您可以搜索给定位置,然后在 O(1) 摊销时间内按顺序遍历。平衡搜索树上的这些边界通常为 O(log n + k),其中 k 是遍历的项目数。如果 k 为 Ω(log n),则为 O(k),即每个项目的 O(1)。
关于java - 棋子表和绳子的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44481650/
我正在尝试使用 GUI 的 NetBeans IDE 在 Java 中制作国际象棋游戏,但我无法使棋子停留在棋盘上方,当我尝试时,棋盘就会被推开。我对这两个图像都使用了标签。如何让棋子停留在棋盘上方而
编辑:要查看JS函数的工作版本,see the accepted answer in this followup thread 编辑:我使用的最终正则表达式是这样的: var pattern = /(
我一直在用 C++(使用 MVS2010)开发一个控制台国际象棋游戏,我似乎遇到了一个我自己无法解决的问题。问题是我需要在控制台中显示以下棋子: http://en.wikipedia.org/wik
我正在尝试用 Java 编写自己的国际象棋游戏。我已经开始编写类(class),我的高级想法如下: 我有一个包含这些字段的 Piece 类: private String name; private
我是一名优秀的程序员,十分优秀!