基数排序的时间复杂度为O(kn),其中n是要排序的键数,k是键长。类似地,trie中的插入,删除和查找操作的时间复杂度是O(k)。但是,假设所有元素都不同,则不是k> = log(n)?如果是这样,那将意味着Radix sort的渐近时间复杂度为O(nlogn),等于quicksort的值,并且trie操作的时间复杂度为O(logn),等于平衡二叉搜索树的时间复杂度。当然,常数因素可能会有很大差异,但渐近时间的复杂性不会。这是真的,如果是这样,基数排序和尝试与其他算法和数据结构相比还有其他优势吗?
修改
Quicksort及其竞争对手执行O(nlogn)比较;在最坏的情况下,每次比较将花费O(k)时间(键仅在检查的最后一位数上有所不同)。因此,这些算法需要O(knlogn)时间。通过相同的逻辑,平衡二叉搜索树操作需要O(klogn)时间。
答案 0 :(得分:2)
大O表示法不是这样使用的,即使k> = log n进行基数排序,O(kn)意味着如果n加倍,你的处理时间会加倍等等,这就是你应该如何使用big-o符号
基数排序的一个优点是最坏的情况是O(kn)(快速排序的O(n ^ 2))因此基数排序在某种程度上比快速排序更能抵抗恶意输入。如果你使用按位运算,2的幂作为基数,就地msd-radix排序与较小数组的插入排序,它也可以真正快速实现性能。
相同的参数对于尝试是有效的,在最坏的情况下插入/搜索是O(k)的意义上它们抵抗恶意输入。 Hashtables在O(1)中执行插入/搜索,但是使用O(k)散列并且在最坏的情况下执行O(N)插入/搜索。此外,尝试可以更有效地存储字符串。
答案 1 :(得分:0)
Radix排序的渐近时间复杂度是O(NlogN),这也是Qucik排序的时间复杂度。 Radix排序的优势在于它最好,平均和最差情况下的性能相同,而最差情况下Quick sort的性能是O(N ^ 2)。但它需要两倍于快速排序所需的sapce。因此,如果空间复杂性不是问题,则Radix排序是更好的选择。