来自维基百科:
主要缺点是更大的整体空间使用和更慢的索引,随着树结构变得更大和更深,这两者都变得更加严重。然而,索引的许多实际应用只涉及对字符串的迭代,只要叶节点足够大以受益于缓存效应,它就会保持快速。
我正在实现绳索和字符串之间的某种妥协。基本上它只是绳索,除了当连接的字符串很短时我将连接对象扁平化为字符串。这有几个原因:
- 当连接的字符串很短时,连接对象的好处是最小的(以正常形式连接两个字符串不需要太长时间)。
- 这样做会减少树的大小/深度(减少绳索的缺点)。
- 这样做会增加叶节点的大小(以更好地利用缓存)。
但是,随着长度变长,绳索的优势也会降低,所以我想找到一些折衷方案。从逻辑上讲,“最佳位置”似乎在“叶节点大到足以从缓存效应中受益”的地方。问题是,我不知道它有多大。
编辑:当我写这篇文章时,我想到理想的大小应该是缓存页面的大小,因为绳索只会导致缓存未命中,因为它们无论如何都会在字符串中发生。所以我的第二个问题是,这个推理是否正确?是否有一种跨平台的方法来检测缓存页面的大小?
我的目标语言是 C++。