編集:このリンク先の元の質問を誰も読んでいないように見えるので、ここでその概要を紹介しましょう。
他の誰かが尋ねたように、元の問題は、合計がデータ型が保持するものを超える多数の値が与えられた場合、Double
それらの値の平均をどのように計算できるかということでした。
50 個と 50 個の数値を取り、それらのセット内の平均を計算し、最後にそれらすべてのセットの平均を取り、それらを組み合わせて最終的な平均値を取得するなど、セットで計算するといういくつかの回答がありました。
私の立場は、これらすべての値を同じサイズのセットに分割できることを保証できない限り、このアプローチは使用できないというものでした。答えを提供するために、誰かが私にここで質問することを敢えてしたので、ここにあります。
基本的に、任意の数の値が与えられると、次のようになります。
- 値の数は事前に知っています (しかし、もしそうでなければ、あなたの答えはどのように変化しますか?`)
- すべての数値を集めることも、それらを合計することもできません (合計は、プログラミング言語の通常のデータ型には大きすぎます)。
どうすれば平均を計算できますか?
ここでの質問の残りの部分では、同じサイズのセットに分割する方法とその問題の概要を説明していますが、どうすればそれができるかを知りたいだけです.
私は、数学理論の用語で、 の合計を計算すると平均が得られることを十分に理解していることに注意してください。A[1..N]/N
単純ではない理由があると仮定して、ワークロードを分割する必要があります。また、値の数が必ずしも 3、7、50、1000 などで割り切れるわけではありません。
言い換えれば、私が求めている解決策は一般的でなければなりません。
この質問から:
私の立場は、これらのセットのサイズが等しいことを保証できない限り、作業負荷をセットに分割することは良くないというものでした。
編集: 元の質問は、特定のデータ型が保持できる上限に関するものでした。彼は多くの数値を合計していたため (例として与えられたカウントは 10^9 でした)、データ型は合計を保持できませんでした。これは元のソリューションの問題だったので、数字が大きすぎて意味のある答えが得られないと思います (これは私の質問の前提条件です。それを逃して申し訳ありません)。
したがって、値の総数で直接除算することはできません。通常の SUM/COUNT ソリューションが存在しない元の理由は、SUM がオーバーフローすることでしたが、この質問では、SET-SET/SET-SIZE がアンダーフローするなどと仮定しましょう。
重要な点は、単純に合計したり、合計値の数で単純に割ったりすることはできないということです。それができない場合、私のアプローチはうまくいくでしょうか?それを修正するにはどうすればよいでしょうか?
問題の概要を説明しましょう。
1 から 6 までの数値の平均を計算しようとしていると仮定しましょう。ただし、(何らかの理由で) 数値を合計し、数値を数え、合計をカウントで割ることによって計算することはできません。つまり、単純に (1+2+3+4+5+6)/6 を実行することはできません。
つまりSUM(1..6)/COUNT(1..6)
アウトです。ここでは、NULL (データベースの NULL と同様) は考慮していません。
その質問に対するいくつかの回答は、平均化される数値をセット (たとえば 3、50、または 1000 の数値) に分割し、その数値を計算し、最後にそれらの値を組み合わせて最終的な平均を取得できることをほのめかしています。
私の立場は、これは一般的なケースでは不可能だということです.これは、すべての数字を均等に分割できない限り、最終的なセットに表示される数字の価値が、以前のセットのすべての数字よりも多かれ少なかれ価値があるためです.サイズのセット。
たとえば、1 ~ 6 の平均を計算するには、次のように 3 つの数字のセットに分割できます。
/ 1 2 3 \ / 4 5 6 \
| - + - + - | + | - + - + - |
\ 3 3 3 / \ 3 3 3 / <-- 3 because 3 numbers in the set
---------- -----------
2 2 <-- 2 because 2 equally sized groups
これにより、次のようになります。
2 5
- + - = 3.5
2 2
(注: (1+2+3+4+5+6)/6 = 3.5 なので、ここでは正しい)
ただし、私のポイントは、値の数を同じサイズのセットに分割できなくなると、この方法は失敗するということです。たとえば、値の素数を含むシーケンス 1 ~ 7 はどうでしょうか。
すべての値を合計せず、すべての値を一度にカウントする同様のアプローチは機能しますか?
それで、そのようなアプローチはありますか?以下が当てはまる任意の数の値の平均を計算するにはどうすればよいですか。
- 何らかの理由で、通常の合計/カウントアプローチを実行できません
- 値の数は事前にわかっています (わからない場合、答えは変わりますか?)