2015-02-10 17 views
-2

我有一個3000數組的數組。Array.sort vs Array.take(x).sort性能

用戶抓取一個數字,然後在隨後的5秒內將其放回任意時間。

我希望用戶每次都在數組中取最小的數字。

在高峯期,最多可有100人同時抓取和更換號碼。與排序整個陣列相比,選擇前100個並對它們進行排序會更便宜嗎?

我使用的Rails PostgreSQL中serialize與YAML

存儲我的數組
+1

與所有與性能相關的問題:**基準測試。** – deceze 2015-02-10 06:19:49

+1

這是一個奇怪的問題,因爲結果不具有可比性。無論如何,採用前101個元素比分類相同數量的元素花費的時間要少得多,並且排序101個元素花費的時間只是排序30倍的時間的一小部分,因此基準測試是浪費時間。 – 2015-02-10 06:26:32

+0

@ muistooshort這已經回答了我的問題的50%。 – softcode 2015-02-10 06:58:30

回答

3

的最排序算法的複雜性是嚴格單調相對於增加至所述陣列的長度(N,N-日誌N,N^2,NN!等)。特別是,Ruby似乎使用快速排序,它是n log n。因此,對3000個項目進行排序比對100個項目進行排序要昂貴。

+1

除此之外,你是絕對正確的,我想知道排序未分類數組的一部分會有什麼感覺? – mudasobwa 2015-02-10 06:55:01

+1

@sawa:完美的答案.. 1+ – 2015-02-10 07:05:06

+0

@sawa謝謝你的回答,但它回答了一半的問題。完整的問題是在選擇數組中的範圍然後對數組進行排序並簡單地對整個數組進行排序的兩個過程之間。選擇需要時間嗎? – softcode 2015-02-10 07:07:51

0

我希望用戶每次取數組中最小的數字(...)選擇一個數字範圍並將這個部分排序是否便宜?

這將返回最小數該範圍內,而不是在陣列中最小的數字:

arr = [7, 3, 5, 10, 2, 8, 6, 1, 9, 4] 

arr.take(3).sort #=> [3, 5, 7] 
# vs 
arr.sort.take(3) #=> [1, 2, 3] 

我儲存使用Rails serialize PostgreSQL中我的陣列YAML

使用3000個數字對Ruby數組排序需要不到一毫秒的時間。反序列化YAML字符串是太慢了

+0

我很高興我們都明白範圍和數組之間的區別。你在第一個報價中拿出的文字是什麼定義了這個問題。 – softcode 2015-02-10 10:10:58

+0

但是,謝謝你清理反序列化YAML比Ruby排序更昂貴:我試圖找到最有效的方法來持久化和讀/寫這個數組。任何想法歡迎 – softcode 2015-02-10 10:13:13

+0

@shiva *「我正試圖找到最有效的方式來堅持和讀/寫這個數組」 - - 你應該發佈一個新的問題。 – Stefan 2015-02-10 10:21:49