我有一个包含3000个数字的数组。
用户抓取一个数字,然后在接下来的5秒内将其放回任意时间。
我希望用户每次都能获取数组中最小的数字。
在峰值时,最多会有100人同时抓取和替换数字。选择前100个并对它们进行排序是否会更便宜,而不是对整个数组进行排序?
我使用Rails serialize
在PostgreSQL中使用YAML
答案 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字符串很多更慢。