Array.sort与Array.take(x).sort性能

时间:2015-02-10 06:14:12

标签: ruby arrays performance postgresql

我有一个包含3000个数字的数组。

用户抓取一个数字,然后在接下来的5秒内将其放回任意时间。

我希望用户每次都能获取数组中最小的数字。

在峰值时,最多会有100人同时抓取和替换数字。选择前100个并对它们进行排序是否会更便宜,而不是对整个数组进行排序?

我使用Rails serialize在PostgreSQL中使用YAML

存储我的数组

2 个答案:

答案 0 :(得分:3)

大多数排序算法的复杂性是相对于阵列长度(n,n log n,n ^ 2,n n!等)平均增加的严格单调。特别是,Ruby似乎使用了快速排序,即n log n。因此,对3000个项目的数组进行排序比对100个项目的数组进行排序更为昂贵。

答案 1 :(得分: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

存储我的数组

使用3,000个数字对Ruby数组进行排序所需的时间不到一毫秒。反序列化YAML字符串很多更慢。