【擬似言語⑤課題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 maxIndexmaxIndexを設けて返り値にしただけですね。
方式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)」を使ってください。
ヒント:配列の要素番号に配列を入れることになるはずです。
さらにヒント。手順。
配列frequencyを初期化する
累積合計を計算するので重要。>【擬似言語③】合計のNoteデータに応じてfrequencyにカウントする
frequencyでの最大値を特定する
評価の最頻値を表示する
答えは下記です。
ここから先は
メンバーシップ
¥ 500 /月
学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ
