重新排列数组,以便按相同元素分组

重新排列数组,以便按相同元素分组,第1张

重新排列数组,以便按相同元素分组

所以答案是否定的。这些信息并没有真正的帮助。它可以使您好一些,但不能让您大吃一惊。

对于建议使用散列以获得线性时间的每个人,您也可以执行相同的排序。此方法称为基数/哈希排序。它会消耗您的内存。

当有更多限制时,您甚至可以使用更酷的技巧(例如,总和,异或等)。

但是,对于仅在广义数组上使用比较的算法,通过这种方式减少问题并不会带来太大的花费。

为了对此提供一个简单的直觉,假设每个元素有1个冗余,因此您的数组为a1,a1,… an,an(n个唯一数字的2n个元素的总数)。

解决方案空间的大小为n!(只要aj-aj是配对的,您就可以按照问题说明中的指定随时对配对进行置换)。输入空间的大小为(2n)!/(2 ^(n))。

这意味着您的算法需要产生足够的信息来排列((2n)!/ n!)/(2 ^ n)=(n (n + 1) … 2n)/(2 ^
n)个元素。每次比较都会为您提供1位信息。所需的比较迭代次数为log(n)+ log(n + 1)… +
log(2n)-n,即big_omega(nlog(n))。这并不比排序更好或更糟。

这是排序的半严格处理方法:http
:
//www.cs.cmu.edu/~avrim/451f11/lectures/lect0913.pdf

我可能会受贿为当前问题生成类似的证明。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5643237.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存