1
23
它叫做 unrolled linked list . 似乎有两个优点,一个在速度上,一个在空间上。首先,如果每个节点中的元素数量大小合适( 例如 最多只有一条缓存线的大小),您可以从改进的内存位置获得明显更好的缓存性能。第二,既然你有O( n / 米 链接,在哪里 n 是展开的链接列表中的元素数,并且 米 是可以存储在任何节点中的元素数,还可以节省可观的空间量,如果每个元素都很小,这一点尤其明显。当构建展开的链接列表时,显然实现会尝试在节点中留下空间;当您尝试插入一个完整的节点时,您会将一半元素移出。因此,最多一个节点将小于半满。根据我的发现(我自己还没有做过任何分析),如果你随机插入东西,节点实际上会满四分之三,如果操作在列表的末尾,甚至会满四分之三。 正如其他人(包括维基百科)所说,你可能想看看 skip lists . 跳过列表是一种漂亮的概率数据结构,用于存储带O(Log)的有序数据 n )插入、删除和查找的预期运行时间。它是由链表的“塔”来实现的,每一层的元素越少,其位置越高。在底部,有一个普通的链接列表,包含所有元素。在每一个连续的层中,元素的数量减少了一倍。 磷 (通常是1/2或1/4)。其建造方法如下。每次将元素添加到列表中时,都会将其插入最下面一行的适当位置(这将使用“查找”操作,该操作也可以快速进行)。那么,有可能 磷 ,它被插入到“上面”的链接列表中的适当位置,如果需要,可以创建该列表;如果它被放置在更高的列表中,那么它将 再一次 以概率出现在上面 磷 . 要查询此数据结构中的某些内容,您总是检查最上面的车道,看看是否可以找到它。如果你看到的元素太大,你会掉到下一个最低的车道,然后重新开始寻找。有点像二进制搜索。维基百科解释得很好,而且图表也很好。当然,内存使用情况会更糟,而且缓存性能不会得到改善,但通常会更快。 工具书类
|
2
3
CDR coding (如果你年龄足够大,能记住Lisp机器)。 也看到 ropes 这是对字符串的列表/数组思想的概括。 |
3
1
我会把这称为一份清单。 |
4
1
虽然我不知道您的任务,但我强烈建议您查看跳过列表。 至于名字,我想一份木桶清单可能是最合适的 |
5
0
你可以称之为
另外,我想看看
|
6
0
这个数据结构在插入和删除方面有什么优势? 前任: 如果你想在3到4之间添加一个元素怎么办?还得换班,需要O(N) 你如何找到适合元素的桶? 我同意杰尔的看法,你得看看 跳跃表 . 它具有链表和数组的优点。 大多数操作都是在O(log n)中完成的。 |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
Manny · 如何比较Perl中的字符串? 2 年前 |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |