由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - O(N)time 和 space 排序?
进入Programming版参与讨论
1 (共1页)
n*w
发帖数: 3393
1
这个题怎么解?
Yash is a student at MIT and has to do a lot of work. He has finished k
homeworks and the deadlines of these homeworks lie between 0 to 𝑘^2
- 1.
Help Yash sort these homeworks in non-decreasing order of deadlines with
expected time and space complexity O(k).
Test Case 1:
Input: k = 5, homeworks = [13, 24, 1, 17, 8]
Output: [1, 8, 13, 17, 24]
https://algomart.quora.com/?__ni__=0&__tiids__=34496228&__filter__=all&__
nsrc__=notif_page&__sncid__=17590302065&__snid3__=24647767134#anchor
h****r
发帖数: 258
2
将这些数字看成n进制,使用radix-sort.
The running time is O(4n) = O(n)
The radix sort running time is O(d * (n + k)) , where d is the number of
digit, n is the number of elements, and k is the number of possible values.
In this case, k equals n. So the total running time is O(2 * (n + n)) = O(4n
) = O(n)
B********u
发帖数: 1
3
radix是O(k^2)吧,k个数,每个数字k位

4n

【在 h****r 的大作中提到】
: 将这些数字看成n进制,使用radix-sort.
: The running time is O(4n) = O(n)
: The radix sort running time is O(d * (n + k)) , where d is the number of
: digit, n is the number of elements, and k is the number of possible values.
: In this case, k equals n. So the total running time is O(2 * (n + n)) = O(4n
: ) = O(n)

C*****l
发帖数: 1
4
bucket sort, take sqrt firstly, which gives bucket。 在每个bucket里面再sort
一下,因为只有k个,所以k个bucket每个bucket里面average个数应该是1. Worsecase
都在一个bucket里面,需要看klog(k)再sort一下
B********u
发帖数: 1
5
我也想了一个解:
先对每个数取log_2(),然后counting sort,从1到k,按照hashtable建立各个bucket
chain,这样期望的时间空间复杂度应该都是O(k)
C*****l
发帖数: 1
6
取log_2可能会拥挤在少数bucket里面,按照题设应该是sqrt

bucket

【在 B********u 的大作中提到】
: 我也想了一个解:
: 先对每个数取log_2(),然后counting sort,从1到k,按照hashtable建立各个bucket
: chain,这样期望的时间空间复杂度应该都是O(k)

B********u
发帖数: 1
7
没毛病,像hashtable那样放个linkedlist就好了
反正这些list期望长度都是1
update:跟你的一样吧,取sqrt的问题是不是还剩2^{k/2}个bucket,还是太多了

【在 C*****l 的大作中提到】
: 取log_2可能会拥挤在少数bucket里面,按照题设应该是sqrt
:
: bucket

C*****l
发帖数: 1
8
取值范围(0, 𝑘^2- 1), sqrt之后(0,k), 如果是log2的话(0, 2*log2(K
))
, log2(k) << k when k is large,所以可能时间复杂度满足要求。

【在 B********u 的大作中提到】
: 没毛病,像hashtable那样放个linkedlist就好了
: 反正这些list期望长度都是1
: update:跟你的一样吧,取sqrt的问题是不是还剩2^{k/2}个bucket,还是太多了

B********u
发帖数: 1
9
我傻逼了,看成了2^k

(K

【在 C*****l 的大作中提到】
: 取值范围(0, 𝑘^2- 1), sqrt之后(0,k), 如果是log2的话(0, 2*log2(K
: ))
: , log2(k) << k when k is large,所以可能时间复杂度满足要求。

1 (共1页)
进入Programming版参与讨论