重新排列数组,以便按相同元素分组
我正在处理数组问题,可以通过排序轻松解决。但是,我的要求实际上比完整的要求更宽松:我只需要保证,如果数组中有任何相同的元素,它们在数组中会彼此相邻。
是否有一种算法可以对数组进行重新排序,使其满足上述条件,比仅进行完整排序会更有效?
-
所以答案是否定的。这些信息并没有真正的帮助。它可以使您好一些,但不能让您大吃一惊。
对于建议使用散列以获得线性时间的每个人,您也可以执行相同的排序。此方法称为基数/哈希排序。它会消耗您的内存。
当有更多限制时,您甚至可以使用更酷的技巧(例如,总和,异或等)。
但是,对于仅在广义数组上使用比较的算法,通过这种方式减少问题并不会带来太大的花费。
为了对此提供一个简单的直觉,假设每个元素有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我可能会受贿为当前问题生成类似的证明。
-
取消设置元素后重新排列数组键
2022-07-28 关注 0 浏览9 1答案
-
如何以每个元素大于/小于其相邻元素的方式重新排列数组
2021-01-31 关注 0 浏览68 1答案
-
如何基于索引数组重新排列数组
2021-01-29 关注 0 浏览58 1答案
-
PHP重新排列月份名称数组
2021-02-02 关注 0 浏览121 1答案
-
重新排列4D Numpy数组
2021-01-29 关注 0 浏览100 1答案
-
重新排列numpy 2D数组的列
2021-01-29 关注 0 浏览98 1答案
-
给定正负整数数组,请重新排列,以便一端有正整数,另一端有负整数
2021-01-31 关注 0 浏览55 1答案
-
重新排列读取
2021-01-29 关注 0 浏览94 1答案
-
如何重新排列MySQL列?
2021-02-02 关注 0 浏览116 1答案
-
给定下列C函数: 整数单链表作为参数,函数重新排列列表的元素 ...
2022-03-03 关注 0 浏览18 1答案