[問題] 一串數字中找到相同的兩個數

看板Prob_Solve作者 (狂禪)時間9年前 (2014/12/01 21:25), 編輯推噓6(6011)
留言17則, 8人參與, 最新討論串1/1
問題: 給定n個數(不限整數或浮點數,也不限上下界), 如果已知其中僅有兩個數相等, 要如何找到這兩個數呢? 我只想得到先sort後再找, 但這樣感覺多做了很多事情, 請問有沒有低於O(nlogn)、最好是O(n)的做法呢? 感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.162.91.142 ※ 文章網址: http://www.ptt.cc/bbs/Prob_Solve/M.1417440347.A.3F4.html

12/01 21:42, , 1F
hash_set
12/01 21:42, 1F

12/01 23:08, , 2F
一個一個丟進binary search tree,丟之前先檢查是不是
12/01 23:08, 2F

12/01 23:08, , 3F
已經在tree裡了
12/01 23:08, 3F

12/02 23:39, , 4F
用BST的話應該也是O(nlogn)? 因為每次丟數字進去的時候
12/02 23:39, 4F

12/02 23:39, , 5F
也花了logn
12/02 23:39, 5F

12/03 16:26, , 6F
我的想法與樓上相同 另外可否請一樓做進一步的解說?
12/03 16:26, 6F

12/04 03:15, , 7F
把浮點數表示法視為整數,然後用xor找?
12/04 03:15, 7F

12/04 14:54, , 8F
我的感覺是如果只准比較那好像逃不出 O(nlogn)
12/04 14:54, 8F

12/04 14:55, , 9F
不過暫時還沒有證明就是了...
12/04 14:55, 9F

12/07 11:47, , 10F
使用資料表達的bit來作BST的話 運算數正比於樹走訪深度
12/07 11:47, 10F

12/07 11:47, , 11F
而樹的深度正比於資料大小 ->O(n)
12/07 11:47, 11F

12/07 11:50, , 12F
兩篇前的perfect hashing那邊我有寫一個類似的作法
12/07 11:50, 12F

12/09 02:16, , 13F
樓上這樣是O(nlogC)吧, C是數值大小
12/09 02:16, 13F

12/09 12:26, , 14F
其實n原本就是input size而不是package size
12/09 12:26, 14F

12/09 12:27, , 15F
看總bit數在armotize後不會發生算了n又要算logC的狀況
12/09 12:27, 15F

12/09 12:30, , 16F
例:讀入任意數量的任意長度整數是O(n)
12/09 12:30, 16F

12/17 18:48, , 17F
真厲害,感謝!
12/17 18:48, 17F
文章代碼(AID): #1KV6nRFq (Prob_Solve)