【发布时间】:2021-11-17 18:35:51
【问题描述】:
我有一个使用数组的双链接列表,并且在插入元素时我保持顺序,例如this。我将新值(节点)视为数组索引并将它们直接存储到它们的位置。链接列表很长。一切都按要求工作,但是当节点落在头尾之间时,是否有任何算法或想法可以帮助我减少迭代次数?
那是
if (new_node > head && new_node < tail) {
search from head()
}
所以要减少迭代;在发现新节点更接近哪个头部或尾部后,我添加了search from tail()。然后我添加了一个位于头部和尾部中间的中间节点。但是当需要链接节点时,我仍然无法减少迭代。知道值的范围会有帮助吗?还有什么可以减少插入时的迭代次数(由于排序性质)?
我希望我能正确解释这一点。
【问题讨论】:
-
如果是链表,你应该通过实现基本的链表操作来抽象它。然后使用它们遍历/搜索列表。
-
您无法显着降低搜索线性数据结构的时间复杂度。您可以向列表中的某些节点添加特殊的随机“快捷方式”链接,这将允许您向前和向后跳跃很远,但这会使节点的结构显着复杂化(节点本质上需要保留附加链接的列表)。您也可以考虑 som random-access list,在 Wikipedia (Linked list / Random-access lists) 中提到,但我没有来源可指。
-
也许你应该考虑一棵树...?