基本情報技術者の実務クエスト

【基本情報の実務】処理速度の見積もり──測るべきは「いまの速さ」ではなく「増え方」

賢者の図書塔の司書見習いから、処理速度の見積もりについて相談が届く。

「蔵書の一覧から目的の1冊を探す処理を作りました。今は先頭から1件ずつ照合しています。蔵書が1万冊から10万冊に増える予定なのですが、処理はどれくらい遅くなるのでしょうか。速くする案があれば、それも教えてほしいです。」

基本情報の知識がここで力になるのは、答えを「秒」で出そうとしないときだ。いまが何秒かは機械や状況で変わるので、そこから伸ばした数字は当てにならない。手順から言えるのは、増え方のほうである。この記事では、そこから整理する。

この記事は、学習アプリ「シカクエ」の実務クエスト「処理速度を見積もる」を読み物として再構成したもの。人物・依頼はすべて架空です。実際の処理時間は、機器やデータの持ち方によって異なります。

まず結論:件数に比例するので、10倍になる

探し方10倍に増えると言える根拠
先頭から1件ずつ手数も10倍1件増えれば、確かめる回数が1回増える
半分ずつ絞る数回増えるだけ1回で候補が半分になる

いまの探し方は先頭から1件ずつ照合である。1件増えるごとに、確かめる回数が1回増える

だから件数が10倍になると、確かめる回数も10倍になる。これは機械の速さと関係なく言える

ここが大事なところである。「いま1秒だから、10秒になります」とは言わないほうがよい

その1秒には探す以外の時間も混ざっているし、10万件になると、それまで無かった事情——一度に置いておけるか、など——が出ることもある。

手順から確かに言えるのは「10倍になる」までである。そこまでを、はっきり言う

平均と最悪を、分けて答える

「10倍」も、実はどの場合の話かで変わる3つに分けて考える

そして「いちばん重いとき」が、いつ起きるかが問題である。

探している本が、無いときである。無いことを確かめるには、全部を見るしかない

ここは見落とされやすい見つかる検索より、見つからない検索のほうが重い

そして探し間違いや、蔵書に無い本の問い合わせは、実際によく起きるいちばん重い場合が、めずらしい場合とは限らない

だから見積もりでは最悪の場合で答える10万冊なら、1回の検索で10万回照合しうる

「遅くなる」と「困る」は別

10倍と分かったところで、まだ判断できない10倍になっても困らないかもしれないからである。

だから速くする話に進む前に、1つ確かめる

何秒までなら、困らないかである。

この答えが出ると手を入れるかどうかが決まる

10倍になっても許せる範囲なら、いまのままでよい速くする改修には、手間と、新しい間違いの余地が付いてくる

速くできることと、速くすべきことは、別である。

半分ずつ絞る──ただし前提が要る

速くする案として、いちばん効くのが半分ずつ絞るやり方である。

並べておいた一覧のまん中を見る探している本より前か後ろかが分かるので、片側を丸ごと捨てられるこれを繰り返す

1回で候補が半分になるので、増え方がまったく変わる。

件数が10倍になっても、増えるのは3回である。1万回と14回を比べると、違いの大きさが分かる。

ただし前提がある並んでいることである。

本を追加するたびに正しい位置に入れる必要がある。探すのが速くなる代わりに、増やすときに手間が移る

だから判断は探す回数と、増やす回数の比で決まる。

図書塔なら、蔵書を増やすのは時々で、探すのは毎日だと思われる。その形なら、並べておくほうが得である。

逆に、絶えず増え続けて、たまにしか探さないものなら、並べる手間のほうが重くなる

回答の例

蔵書検索の処理速度について

1. どれくらい遅くなるか

照合の回数は、10倍になります。

先頭から1件ずつ確かめる方法では、1件増えるごとに確かめる回数が1回増えます。ですので、蔵書が10倍になると回数も10倍です。

「いま1秒なので10秒です」という形ではお答えしていません。いまの1秒には探す以外の時間も含まれており、10万冊になると別の事情も出てくるためです。手順から確かに言えるのは、10倍という増え方までです。

2. いちばん重いのは、見つからないとき

平均すると半分あたりで見つかるので、1万冊なら5,000回ほどです。

ただし探している本が蔵書に無い場合は、最後まで見ることになります。無いことを確かめるには、全部を見るしかないためです。

10万冊なら、1回の検索で10万回の照合が起こりえます。お問い合わせには「うちには無い本」も含まれますので、これはめずらしい場合ではありません。

3. 先にうかがいたいこと

何秒までなら、お困りになりませんか。

窓口でお客様がお待ちなのか、夜間にまとめて動かすのかで、必要な速さが変わります。1日に何回お使いになるかもあわせて教えてください。

10倍になっても許せる範囲でしたら、いまのままをおすすめします。速くする改修には手間がかかり、新しい間違いの余地も生まれるためです。

4. 速くする案

いちばん効くのは並べておいて、半分ずつ絞る方法です。

まん中を見て、探している本より前か後ろかを判断し、片側を丸ごと捨てます。これを繰り返します。

10倍に増えても、3回しか増えません。

5. その代わりに増える手間

この方法には並んでいることが要ります。本を追加するたびに、正しい位置に入れる必要があります。

探すのが速くなる代わりに、増やすときに手間が移ります。

図書塔では、蔵書を増やすのは時々で、探すのは毎日かと思います。その形でしたら、並べておくほうが得になります。

蔵書の追加がどれくらいの頻度か、あわせて教えていただけますでしょうか。

「秒でお答えしていません」と、その理由を書いた答えなかったことを、答えていない形にしない

見つからないときを、独立した項にした。聞かれていないが、いちばん効く情報である。

速くする案の前に、質問を置いた直さない選択を先に見せている。

「いまのままをおすすめします」と書ける形にした。改修が要らないなら、そう言う

最後に代わりに増える手間を書いた。速くする案だけ渡すと、その手間があとから出てくる

作り方の手順

  1. 秒で答えようとしない。環境で変わる。
  2. 増え方を見る。手順から言える。
  3. 1件増えると、手数がいくつ増えるかを数える。
  4. 平均と最悪を分ける。
  5. 最悪がいつ起きるかを確かめる。ここでは「無いとき」。
  6. それがめずらしいかどうかまで見る。
  7. 「何秒までなら困らないか」を先に聞く。
  8. 直さない選択を見せる。
  9. 速くする案の前提を書く。
  10. 手間がどこへ移るかを書く。

この場面で効いている基本情報の知識

知識そのものより、速さを「秒」ではなく「増え方」で答えられることが、この場面で効いている。

見積もりで外したくないポイント

  1. 秒から伸ばさない。環境で変わる。
  2. 増え方は、手順から言える
  3. 先頭から1件ずつなら、件数に比例。10倍で10倍。
  4. 平均と最悪を分ける
  5. 見つからない検索が、いちばん重い
  6. それはめずらしい場合ではない
  7. 「遅くなる」と「困る」は別
  8. 何秒までなら困らないかを先に聞く
  9. 半分ずつ絞ると、10倍でも数回しか増えない
  10. 並べる手間がどこへ移るかを書く。
この記事は見積もりの考え方を整理したものです。実際の処理時間は、機器・データの持ち方・同時に使う人数などによって異なります。実測とあわせてご検討ください。

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る
架空の実務場面をもとにした学習用の解説記事です。実在の会社・物件・取引ではありません。制度は改正されることがあるため、受験年度の最新情報もあわせてご確認ください。