基本情報技術者 2009年 春期 午前(科目A) 問02
問題文
0000~4999のアドレスをもつハッシュ表があり、レコードのキー値からアドレスに変換するアルゴリズムとして基数変換法を用いる。キー値が55550のときのアドレスはどれか。ここで、基数変換法とは、キー値を11進数とみなし、10進数に変換した後、下4けたに対して0.5を乗じた結果(小数点以下は切捨て)をレコードのアドレスとする。
選択肢
ア:0260(正解)
イ:2525
ウ:2775
エ:4405
🔒 解説は解答すると表示されます
基数変換法によるアドレス計算【午前解説】
正解の理由
問題の手順に従うと次の通りです。まずキーを11進数とみなして10進数に変換します。
を展開すると です。
この10進数の下4けたは0520なので、これにを乗じて切捨てると、4桁で表記すると「0260」になり、選択肢のアが一致します。
を展開すると です。
この10進数の下4けたは0520なので、これにを乗じて切捨てると、4桁で表記すると「0260」になり、選択肢のアが一致します。
解法ステップ
- キーを11進数とみなして各桁を展開する。 を計算。
- 11の冪を掛け合わせて合計を求める:。
- 得られた10進数の下4けたを抽出する(ここでは0520)。
- 抽出した値にを乗じ、結果の小数以下を切捨てる()。
- 4桁で表記する(先頭に0を補って「0260」)。
簡単な計算確認用Python例:
n = 0
digits = [5,5,5,5,0] # 11進の桁(左が上位)
for d in digits:
n = n*11 + d
n, int((n % 10000) * 0.5)
# 出力: (80520, 260)
選択肢別の誤答解説
- ア: 0260 — 正解。上記手順に従うと得られる結果です。
- イ: 2525 — 誤り。下4けたを別の値(例えば5050)と誤認したか、11進からの変換を10進として扱った可能性があります。
- ウ: 2775 — 誤り。0.5倍の取り扱い(小数処理や切捨て)を誤ったか、下4けたの抽出ミスが考えられます。
- エ: 4405 — 誤り。おそらく11進の位取り計算を誤り、全体の10進変換で大きくずれた結果です。
よくある誤解
- キーをそのまま10進数扱いして計算する:55550を10進数のまま下4けたを取るなどすると誤答になります。
- 変換順序を誤る:下4けたを先に取らずに桁ごとに0.5をかけるなど、順序を変えると結果が違います。
- 小数処理の誤り:0.5倍の結果の小数部分を切り上げてしまうミス(問題は「切捨て」)が散見されます。
補足コラム
基数変換法で「キーをある基数とみなす」手法は、キーの分布をある程度制御してハッシュ表のアドレス範囲に収めるために用いられます。本問題では11進とみなして10進に変換した後、下4けた(0〜9999)を半分にすることで、アドレス範囲0000〜4999に自然に収める設計になっています。小数点以下の取り扱い(本問は切捨て)を明確に理解しておくことが重要です。
FAQ
Q. なぜ11進数を選ぶのですか?
A. 問題設定による指定です。基数が与えられればその基数での展開を行います。基数はハッシュ関数の設計次第で選ばれます。
A. 問題設定による指定です。基数が与えられればその基数での展開を行います。基数はハッシュ関数の設計次第で選ばれます。
Q. 小数点以下が出た場合はどうしますか?
A. 問題文に「小数点以下は切捨て」と明記されているため、切捨てを適用します。
A. 問題文に「小数点以下は切捨て」と明記されているため、切捨てを適用します。
Q. 結果は必ず4桁で表示しますか?
A. ハッシュ表のアドレス表記が4桁固定(0000〜4999)なので、先頭に0を補って4桁表示します。
A. ハッシュ表のアドレス表記が4桁固定(0000〜4999)なので、先頭に0を補って4桁表示します。
関連キーワード: 基数変換法、11進数、ハッシュ法、アドレス計算、切捨て、桁位置係数、下4けた、基数変換

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

