在我们的日志文件中,我们存储请求的响应时间。计算中位响应时间的最有效方法是什么,“75/90/95% 的请求在少于 N 次的时间内得到处理”数字等?(我想我的问题的一个变体是:计算一堆数字流的中位数和标准差的最佳方法是什么)。
我想出的最好的办法就是阅读所有的数字,对它们进行排序,然后挑选出数字,但这似乎真的很愚蠢。没有更聪明的方法吗?
我们使用 Perl,但任何语言的解决方案都可能会有所帮助。
在我们的日志文件中,我们存储请求的响应时间。计算中位响应时间的最有效方法是什么,“75/90/95% 的请求在少于 N 次的时间内得到处理”数字等?(我想我的问题的一个变体是:计算一堆数字流的中位数和标准差的最佳方法是什么)。
我想出的最好的办法就是阅读所有的数字,对它们进行排序,然后挑选出数字,但这似乎真的很愚蠢。没有更聪明的方法吗?
我们使用 Perl,但任何语言的解决方案都可能会有所帮助。
请参阅文章计算内存受限应用程序中的百分位数。它解释了如何有效地计算中位数和其他百分位数。
另外,这里有一篇关于计算标准偏差(方差)的文章:准确计算运行方差。
你可以看看快速选择:
http://en.wikipedia.org/wiki/Selection_algorithm
或者在 Wirth 算法: http: //www.mail-archive.com/numpy-discussion@scipy.org/msg20059.html
中位数的基准可以在这里找到:http: //ndevilla.free.fr/median/median/index.html