数学A / 場合の数

辞書式順序(何番目の数か)

★★★ 応用順列辞書式順序

問題

1, 2, 3, 4, 5 の5個の数字をすべて使ってできる5桁の整数を、小さい順に並べる。

(1) 51234 は小さいほうから何番目か。

(2) 小さいほうから80番目の数を求めよ。

ヒントを見る

先頭の数字を固定すると、残りの並べ方が一定個数のかたまりになる。(1)は先頭が小さい数のかたまりを積み上げて何番目かを数える。(2)は目標の番号を、かたまりの大きさで割って先頭から順に絞りこむ。

解答・解説

方針

辞書式(小さい順)の問題は、上の位から「そこに小さい数字が入る整数が何個あるか」を積み上げて数える。

5個の数字の順列は全部で 個。先頭の数字を1つ決めるごとに、残り4桁の並べ方 個のかたまりができる。

このかたまりの個数を数えると、順位や『何番目の数か』が、上の位から1つずつ分かっていく。

解答

⓪ 発想 — どう考え始めるか。 「何番目か」は、 つずつ数えていては終わらない。

先頭の数字を決めると、残り 桁の並びが 個のかたまりになる。このブロック単位で数を積み上げる。

逆に「 番目は?」も、同じブロック割りで上の位から絞り込める。

辞書式は、ブロックの大きさで位取りをする。この見方が主役だ。

5個の数字の順列は 個。先頭の数字を1つ決めると、残り4桁の並びが 個あるので、「先頭が◯の整数」は24個ずつのかたまりになる。

(1) 51234 の順位

先頭が 1, 2, 3, 4 の整数は、それぞれ24個ずつで合計 個あり、これらは全部 51234 より小さい(先頭が5より小さいから)。

次に先頭が5の整数を考える。51234 は、先頭5の後ろが「1234」で、これは残り4個 を小さい順に並べたいちばん小さい並びだ。だから先頭5のかたまりの中では1番目。

(2) 80番目の数

80番目がどの『先頭』のかたまりに入るかを調べる。24個ずつなので

  • 先頭1: 1〜24番目、先頭2: 25〜48番目、先頭3: 49〜72番目、先頭4: 73〜96番目

80番目は先頭4のかたまりの中の 番目だ。先頭は4に決まる。

残る数字は 。2桁目を決めると残り3桁が 個ずつのかたまりになる。 を小さい順に見て

  • 2桁目1: 1〜6番目、2桁目2: 7〜12番目

8番目は2桁目2のかたまりの 番目。2桁目は2

残る数字は 。3桁目を決めると残り2桁が 個ずつ。

  • 3桁目1: 1〜2番目

2番目はこの中にあり、3桁目は1、その中の2番目。残る の並びは小さい順に「35」(1番目)、「53」(2番目)だから、下2桁は53

つなげて

発展 — 一歩先へ。 辞書式の順番が決まると、ある並びの「次の並び」を、全部を作り直さずに求められる。

手順はこうだ。右から見て、初めて増加する箇所を探す。そこの数字を、右側にあるより大きい数字のうち最小のものと入れ替え、さらに右側を小さい順に並べ替える。これで辞書式のちょうど つ後ろが得られる。

この「次の順列」の作り方は、コンピュータで順列を辞書順にもれなく生成するときの土台になっている。 個の並びを 番から順に吐き出したり、ある並びから何番か先へ飛んだりできる。数え上げと手順(アルゴリズム)は地続きだ。

(1) 97番目 (2) 42153

別解

別解 — 順位を「階乗進法」の数として読む(得意な人向けの高い視点)。 位取りのかたまりが だったことに注目すると、順位そのものを「位の重みが階乗になった数」として読める。

まず順位を から数え直す(最小の 番目とする)。ある並びの 始まりの順位は、各桁について「その桁より右にある、自分より小さい数字の個数」を、重み でかけて足した値になる。

(1) では、先頭 の右に小さい数字が 個あり、以降の桁は右に自分より小さい数字が つもない。だから 始まりの順位は 始まりに直して 番目。

(2) 番目は 始まりで 。これを階乗の重みで割り分ける。 で、係数は上の桁から 、最後の桁は残り 個で自動的に決まる。この係数は「残っている数字のうち、下から何個を飛ばして次を取るか」を表す。 から 個飛ばして 、残り から 個飛ばして 、残り から 個飛ばして 、残り から 個飛ばして 、最後は 。よって

順位と並びを「位の重みが でなく の数」で橋渡しするこの見方なら、順位を つの数として分解するだけで並びが定まる。本解の積み上げと同じ 番目・ にたどり着く。

ポイント

  • 先頭を決めるごとに、残り桁の順列 個のかたまりができる
  • 順位を求める: 自分より小さい先頭の整数の個数を積み上げる
  • 何番目かを求める: かたまりの大きさで割り、上の位から決めていく

よくある間違い

  • (1)で「 より小さい数」を数えたあと、 自身の分の を足し忘れて 番目とする。
  • (2)で数字を使ったら候補から取り除くのを忘れ、すでに使った数字をまた選んでしまう。
  • かたまりの大きさ()を取り違え、上の位を決めるときの個数を数え違える。