10

配列の中央値とモードを見つける C++ コードを作成する必要があります。数値がソートされた後は、配列のモードを見つける方がはるかに簡単だと言われています。関数をソートしましたが、まだモードが見つかりません。

 int counter = 0;
    for (int pass = 0; pass < size - 1; pass++)
        for (int count = pass + 1; count < size; count++) {
            if (array [count] == array [pass])
                counter++;
            cout << "The mode is: " << counter << endl; 
4

17 に答える 17

7

配列が既にソートされている場合は、数値の出現を一度に数えることができます。次に、出現回数が最も多い番号を保存します。そして、1 つの for ループだけでモードを見つけることができます。そうしないと、複数の for ループを実行する必要があります。以下のリンクで詳細な例を参照してください。

ここにコードがあります、

int number = array[0];
int mode = number;
int count = 1;
int countMode = 1;

for (int i=1; i<size; i++)
{
      if (array[i] == number) 
      { // count occurrences of the current number
         ++count;
      }
      else
      { // now this is a different number
            if (count > countMode) 
            {
                  countMode = count; // mode is the biggest ocurrences
                  mode = number;
            }
           count = 1; // reset count for the new number
           number = array[i];
  }
}

cout << "mode : " << mode << endl;
于 2013-11-12T04:08:17.617 に答える
2

1 つの方法は、ランレングス エンコーディングを使用することです。Run Length エンコーディングでは、表現は次のようになります。(項目、その頻度)。

その際、最大頻度とアイテムを追跡します。これにより、ランレングスが完了するとモードが表示されます。

例えば:

 1 1  2 2 2 3 3 4 5

ランレングスエンコーディングは

 {1, 2}, {2, 3}, {3, 2}, {4, 1}, {5, 1}

O(n) スペースが必要です。

于 2013-11-12T04:07:58.373 に答える
1

コード スニペットは次のとおりです。

int number = array[0];
int mode = number;
int count = 1;
int countMode = 1;

for (int i=1; i<size; i++)
{
    if (array[i] == number) 
    {
        count++;
    }
    else
    {
        if (count > countMode) 
        {
            countMode = count;
            mode = number;
        }
        count = 1;
        number = array[i];
    }
}

cout << "mode : " << mode << endl;
于 2014-02-01T10:11:48.010 に答える
0

「モード」は、最も頻繁に発生する値です。番号が繰り返されない場合、リストのモードはありません。したがって、「モード」を知る必要がある場合、並べ替えを行うメリットはありません。

中央値について言及していないのは確かですか?中央値はセットの真ん中の数字です。1,2,3,4,5 の場合、中央値 (中央の数値) は (total_number)/2) で、奇数の場合は切り上げられます。2.5 -> 3 で、中央値は 3 になります。実際に計算できるのは、数値がソートされている場合は中央値。セット 1,2,3,4,5,6 に偶数がある場合、モードはスロット 3,4 (偶然にも 3,4) (total_number)/2 スロットおよび (total_number)/2 + 1 スロットです。 、数値の偶数配列の場合。

http://www.purplemath.com/modules/meanmode.htm

于 2013-11-12T04:05:22.863 に答える
0

このコードは、モードを提供する必要があります。2 つの異なる数値が同数ある場合は、最初の数値が出力されます。

int count = 1, mode = 0, m = 0, i = 1;
size_t sz = sizeof(array)/sizeof(*array);
while(i != sz+1) {
    if(array[i-1] != array[i]) {
        if(count > m) {
            mode = array[i-1];
            m = count;
            count = 1;
        }
    }
    else
        ++count;
    ++i;
}
std::cout << "mode: " << mode << std::endl;
于 2013-11-12T04:22:05.880 に答える