online algorithm 找中位數
這是個面試問題..但我也不知道解答
給定一個一直會產生的數列..要如何最有效率的找到中位數
如果是要求平均只要constant time 和 space, 中位數就得要所有數都存了
(因為任何過去出現的數都有可能在新產生幾個數列後變成中位數)
如果固定n個數, 需要O(n)的時間和空間可以找到第k大的數(任意k)
(selection), 但如果這個數列一直在產生呢?
有沒有data structure 可以在n個數後新加m個數,而能在O(m)找到中位數?
O(mlogn)倒是應該可以(不太確定)
若有個blance binary search tree, 並且計有每個子樹下有多少個數,
中位數應該離root不遠, 可能可以在有這樣的數中constant time找到
(對嗎?) 新插入m個數也只要mlogn
實際問題若資料有特殊的分佈也許也可以把數分堆
不知道版上有沒有大師可以指導解惑
--
Life is continuous
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 108.94.138.88
推
08/17 16:17, , 1F
08/17 16:17, 1F
→
08/17 16:24, , 2F
08/17 16:24, 2F
推
08/17 17:33, , 3F
08/17 17:33, 3F
※ sorryChen:轉錄至看板 Prob_Solve 08/18 00:20
→
08/18 00:22, , 4F
08/18 00:22, 4F
→
08/18 00:24, , 5F
08/18 00:24, 5F
推
08/18 01:10, , 6F
08/18 01:10, 6F
→
08/18 03:32, , 7F
08/18 03:32, 7F
→
08/18 03:32, , 8F
08/18 03:32, 8F
→
08/18 03:32, , 9F
08/18 03:32, 9F
→
08/18 03:34, , 10F
08/18 03:34, 10F
推
08/18 04:34, , 11F
08/18 04:34, 11F
→
08/18 04:34, , 12F
08/18 04:34, 12F
推
08/18 04:37, , 13F
08/18 04:37, 13F
→
08/18 04:38, , 14F
08/18 04:38, 14F
→
08/18 04:38, , 15F
08/18 04:38, 15F
→
08/18 09:48, , 16F
08/18 09:48, 16F
→
08/18 09:49, , 17F
08/18 09:49, 17F
→
08/18 10:52, , 18F
08/18 10:52, 18F
推
08/18 12:13, , 19F
08/18 12:13, 19F
→
08/18 12:13, , 20F
08/18 12:13, 20F
→
08/18 12:14, , 21F
08/18 12:14, 21F
→
08/18 13:07, , 22F
08/18 13:07, 22F
→
08/18 13:08, , 23F
08/18 13:08, 23F
→
08/18 13:09, , 24F
08/18 13:09, 24F
推
08/18 15:16, , 25F
08/18 15:16, 25F
→
08/18 15:17, , 26F
08/18 15:17, 26F
→
08/18 15:17, , 27F
08/18 15:17, 27F
→
08/18 15:17, , 28F
08/18 15:17, 28F
推
08/18 23:17, , 29F
08/18 23:17, 29F
推
08/19 10:18, , 30F
08/19 10:18, 30F
推
08/19 11:33, , 31F
08/19 11:33, 31F
→
08/19 11:33, , 32F
08/19 11:33, 32F
推
08/19 11:37, , 33F
08/19 11:37, 33F
→
08/19 11:37, , 34F
08/19 11:37, 34F
推
08/20 07:40, , 35F
08/20 07:40, 35F