アルゴリズムの設計と追跡
要点と定義
アルゴリズムは、入力に対して目的の結果を得るための、順序立った処理手順です。流れ図では、処理、判断、繰返しなどの記号と線で手順を表し、擬似言語では条件や代入を文章に近い形で記します。どちらも、処理の順番と分岐条件を他の人が追えるようにする表現方法です。
アルゴリズムを設計するときは、まず入力、出力、満たすべき条件を整理します。その後、順次処理・判断・繰返しに分け、各変数が何を表し、いつ更新されるかを定めます。繰返しでは、終了条件に加え、繰返しのたびに何が進むかも確認します。配列の添字がゼロから始まるか一から始まるかは仕様に従います。配列の出力位置と、データが表す番号を混同すると、正しい値でも別の位置に記録してしまいます。
表や配列を使う処理では、検索値、検索範囲、検索方法、返す位置を別々に考えます。昇順の下限値表から値以下の最大の下限を探すなら、その範囲が昇順であることを確かめて「以下の最大値」を使います。見つかった位置は配列内の位置であり、必要な区分番号や料金表の行・列に対応付けて使います。発送できる商品の重さを区分表から選ぶ処理では、上限超過を先に除外してから下限値を検索します。
探索する対象の状態も明示します。例えば最短経路探索では、確定した距離と仮の距離を分け、未確定地点のうち最小の仮距離を選びます。選んだ地点の隣接地点について、経由した距離が現在の仮距離より短ければ更新します。経路そのものを出力するには、各地点の直前の地点を記録する作業用情報をたどり、出力配列には経路順の位置で格納します。地点番号をそのまま出力配列の添字にするわけではありません。
適用条件と例
例えば、商品Xを460グラム、商品Yを720グラム、商品Zを1,200グラムとし、それぞれの数量が12、6、4なら、総重量は「12×460+6×720+4×1,200=14,640グラム」です。区分表の下限が1、1,866、4,741、9,586、19,131グラムと昇順に並ぶ場合、14,640以下で最大の下限は9,586なので区分4を選びます。区分4の箱が870グラムなら梱包後は15,510グラムです。この方法が正しいのは、検索範囲が意図した下限値を昇順に並べた表であり、上限超過を別途判定している場合です。上限値の列を下限値として検索したり、昇順の表に降順用の検索指定を使ったりすると誤った区分になります。
複数条件で「料金を検索できない場合」を判定するなら、重量区分が無効、または発送先の地域が見つからない、のどちらかが該当したときに検索不可とします。論理和は少なくとも一方が真なら真、論理積は両方とも真のときだけ真です。条件を作る際は、空欄かどうかだけでなく、検索結果が存在するかも確認します。料金表から値を取り出すときは、重量区分を行位置、地域の検索位置を列位置に対応させます。表引き関数の行と列を逆にすると、意図した料金セルになりません。
この節の続き
- 誤りやすい点
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む