メインコンテンツへスキップ
見出し画像

【擬似言語⑤課題3❶】最頻値 | 方式❶binで数える(基本情報技術者, 科目B, アルゴリズム)

    このNoteでは「最頻値」を求める擬似言語を作ります。

    3つ方式を考えついたので全3回になります。分かり易い回から学習しても大丈夫ですよ。ご自分でも「{1, 2, 4, 2}って4枚のカードが1枚ずつ手元に来た時に、一番枚数の多い数字をどう調べるか」手順を考えて見てくださいね。

    1つめ。今回は、部屋を準備して入ってもらう感じ。データによっては空室も残ります。>【擬似言語⑤課題3❶】最頻値 | 方式❶binを準備して数えるNote(今回)

    画像

    2つめ。予め並べてから数える方式。>【擬似言語⑤課題3❷】最頻値 | 方式❷ソート後に数えるNote

    画像

    3つめ。都度部屋を追加しながら数える方式。私が手作業でやるならこの手順かなぁ。>【擬似言語⑤課題3❸】最頻値 | 方式❸リスト登録しながら数えるNote

    画像

    それでは始めましょう!


    >全Noteへのリンク(FE節)
    ※科目Aのテーマ別/科目B/旧FE午後など沢山作りました!


    最頻値とは一番”多い”値

    「最頻値(モード, mode)」とは、最も多い頻度の値です(wikipedia)。

    例えば、データ{10, 20, 20, 30}の時、10は1個, 20は2個, 30は1個なので、2個が一番多い。よって最頻値は20。

    以上から、最頻値を求めるには、❶値の登場回数を数えて、❷登場回数の「最大」を探す、手順だと分かります。

    次節では、>【擬似言語⑤】最大値のNote をちょい改造して準備します。




    下準備 | 最大値探索の関数を活用

    最頻値は登場回数の最大値を探す手順があるので、>【擬似言語⑤】最大値のNote で作った最大値を返す「findMax関数」を改良します。下記が以前作った関数。

    〇findMax(整数型の配列: data)
      整数型: maxVal
      整数型: i
    
      maxVal ← data[1]
    
      for (i を 1 から dataの要素数 まで 1 ずつ増やす) 
        if (data[i] > maxVal)
          maxVal ← data[i]  / チャンピオンの交代 */
        endif
      endfor
    
      maxVal を表示する

    課題。返り値を「最大値が記憶された要素番号」に変更して下さい。>【擬似言語⑪課題】重複排除のNoteと同様です。

    ○整数型: findMaxIndex(整数型の配列: data)
      整数型: maxVal, maxIndex
      整数型: i
    
      maxVal ← data[1]
      maxIndex ← 1
    
      for (i を 2 から dataの要素数 まで 1 ずつ増やす)
        if (data[i] > maxVal)
          maxVal ← data[i] / チャンピオンの交代 */
          maxIndex ← i     / チャンピオンの要素番号 */
        endif
      endfor
    
      return maxIndex

    maxIndexを設けて返り値にしただけですね。




    方式1 | 階級(bin)を設ける

    5段階評価のデータの時、評価1を配列frequency[1]で数え、評価2を[2]で、3を[3]、4を[4]、5を[5]で数える方式を考えます。

    各部屋に案内して数えるイメージですね。

    画像

    擬似言語を作って見てください。

    • 関数名:getModeBin

    • 引数:整数型の配列array

    • 返り値:整数型の変数modeIndex。最頻値をカウントしちあfrequencyの要素番号。例えば、array={1, 1, 1, 2}の時、frequency={3, 1}となるので、frequency[1]が最頻値の個数を記録しているので、modeIndex=1を返す。

    • 最大値探索には、前節の「findMaxIndex(整数型の配列: data)」を使ってください。

    ヒント:配列の要素番号に配列を入れることになるはずです。

    さらにヒント。手順。

    1. 配列frequencyを初期化する
      累積合計を計算するので重要。>【擬似言語③】合計のNote

    2. データに応じてfrequencyにカウントする

    3. frequencyでの最大値を特定する

    4. 評価の最頻値を表示する


    答えは下記です。

     
     
    大学・専門学校の先生の解説Note。 学生時代にITパスポート試験・基本情報技術者試験・応用情報技術者試験を独学で高得点合格。情報処理安全確保支援士試験(セキスペ)・データベーススペシャリスト試験・ネットワークスペシャリスト試験・G検定なども取得。 2027年にPD-S受験予定。