Algorithm 什么使水桶排序好?
因此,我偶然发现了基于非比较排序的算法,确切地说,是桶排序,但我无法确切地理解为什么它是好的 我有一个想法,但我需要有人来证实 假设我想对一个1000个元素的数组进行排序,如果它是均匀分布的,并且被分成10个桶,每个桶有100个元素 使用n log(n)算法对100个元素进行10次排序=10*100 log(100)=1000 log(100)=2000 使用n log(n)算法对1000个元素进行排序时=1000 log(1000)=3000 因此,该算法利用了,如果n=m+l,那么(m+l)^2>m^2+l^2,这同样适用于n个log(n)算法 因此,数据的弯曲越均匀,桶排序的性能就越好 是这样吗Algorithm 什么使水桶排序好?,algorithm,sorting,bucket-sort,Algorithm,Sorting,Bucket Sort,因此,我偶然发现了基于非比较排序的算法,确切地说,是桶排序,但我无法确切地理解为什么它是好的 我有一个想法,但我需要有人来证实 假设我想对一个1000个元素的数组进行排序,如果它是均匀分布的,并且被分成10个桶,每个桶有100个元素 使用n log(n)算法对100个元素进行10次排序=10*100 log(100)=1000 log(100)=2000 使用n log(n)算法对1000个元素进行排序时=1000 log(1000)=3000 因此,该算法利用了,如果n=m+l,那么(m+l)
最佳桶数是多少?(我觉得这是一种时空权衡,但也取决于所排序数据的一致性)但您必须考虑到,bucketing步骤的复杂性为1000。 这将为您提供:
- 桶排序:
1000+10*100日志(100)=3000
- 比较排序:
1000*日志(1000)=3000
O(n.w)
,其中w
是表示元素的位数。线性的比合并排序好?等一下,w
通常有多大?是的,对于通常的数据集,您必须使用log(n)
位来表示元素,所以回到nlog(n)
正如您所说的,这是一种时间/内存交易,基数排序是指当您有固定内存预算时(但谁没有呢?)。如果您可以随着输入大小线性增长内存,那么使用n
bucket,您就有了O(n)
排序
示例参考(有很多!):