我试图了解不同搜索数据结构的时间复杂性。我非常了解搜索,插入和删除,但我没有得到的是范围查询。例如,无序和有序链表,或不平衡和平衡二进制树(或AVL)或哈希表的范围查询时间复杂度是多少?我找到了bigocheatsheet.com网站,但他们似乎没有对范围查询说些什么。
关于基本的搜索和插入,当哈希表半满时说它如何改变,比如二次探测?一个完美的哈希函数可以使事情保持不变但是什么时候不完美?
答案 0 :(得分:0)
范围查询意味着查找属于给定范围的所有元素。例如,数据结构上的[a,b]的范围查询意味着找到落在a和b之间的元素的计数。
在有序或无序链接列表上提供范围查询将需要O(n)时间,因为在最坏的情况下,您需要遍历整个列表以查找元素a和b。
在平衡或非平衡二叉树上提供范围查询需要相同的最坏情况时间O(n),除非树是Range Tree。如果是Range Tree则范围查询需要O(logn,k),其中k是该范围内的元素数。
简而言之,范围查询的最坏情况时间复杂度为O(n),除非数据结构专门用增加范围查询的信息进行扩充。为了优化范围查询的数据结构,首先对数据集进行一些预处理,并且每个节点都存储必要的信息。在提供范围查询时,存储在每个节点的信息用于减少搜索范围。