通过使列表保持排序

时间:2019-03-20 16:02:11

标签: algorithm data-structures time-complexity hashtable

以下是教科书“ 算法简介”中的一个问题,但未提供解决方案...

  

Marley教授假设他可以通过修改链接方案以使每个列表保持排序来获得可观的性能提升。教授的修改如何影响成功搜索,失败搜索,插入和删除的运行时间?

对于这个问题,我认为如果列表是排序的,则搜索的运行时间将是相同的,因为它们是链接列表,并且仍然需要遍历整个列表才能找到值。

但是对于插入,它会花费更长的时间,因为不能立即将值插入列表的开头,因为现在必须保留顺序。我相信它不再是 O(1)

要删除,我不知道。

实际上,我不确定我的答案是否正确,有人可以在这里帮助我吗?

1 个答案:

答案 0 :(得分:2)

您可以通过对同一插槽中的元素进行排序来提高性能,但不能通过链表进行排序。
取而代之的是,可能使用平衡树(并且,通常是red-black tree

但是,需要权衡取舍,只有当同一插槽中的元素超过一定数量时,它才可以真正提高性能。


示例-Java的{​​{1}}

在Java 8中,HashMap被重写为同时使用HashMaplinked list表示插槽中的元素。

在预先定义的阈值触发下,有red-black treetreeify()个操作可在两种结构之间进行转换。