1

95% percentileJava で自分のデータセットから計算しようとしています。私のデータセットには次のようなものがあります-

私はConcurrentHashMapこのようなキーと値のペアを持つことになります-

Key = 30
Value = 10

これは、30 ミリ秒で 10 回の呼び出しが返されたことを意味します。

もう一つの例-

Key = 20
Value = 5

つまり、20 ミリ秒で 5 回の呼び出しが返ってきました

上記のマップから、Java で 95% パーセンタイルを計算しようとしています。

上記のマップからJavaでそれを行う方法の例を誰かが提供できますか? 助けてくれてありがとう

更新されたコード:-

以下は、マップから95パーセンタイルを計算するコードです-

/**
 * A simple method to log 95th percentile information
 */
private static void logPercentileInfo() {

    double total = 0;
    for (Map.Entry<Long, Long> entry : CassandraTimer.histogram.entrySet()) {
        long value = entry.getKey() * entry.getValue();
        total += value;
    }

    double sum = 0.95*total;

    double totalSum = 0;

    SortedSet<Long> keys = new TreeSet<Long>(CassandraTimer.histogram.keySet());
    for (long key : keys) {

        totalSum += CassandraTimer.histogram.get(key);

        if(totalSum >= sum) {
            System.out.println(key);
        }
    }

}

誰かが見て、私が正しく書いたかどうかを教えてもらえますか?

4

2 に答える 2

5

アルゴリズムは次のとおりです: マップのすべての値を合計し、合計の 95% を計算し、値の現在の合計を維持しながら昇順でマップ キーを反復し、合計が以前に計算された合計の 95% に等しいかそれを超える場合、キーは95パーセンタイルになります。

于 2013-03-30T02:58:05.123 に答える