回 8-6 分野 8 考え方
対称性は、何かを入れ替えたり裏返したりしても変わらない性質です。2 人 の距離は A から B でも B から A でも同じなので、n 人の全部の組の距離は、n × n 回ではなく n × (n − 1) ÷ 2 回 の計算で足ります。対称性を見つけると、数える量を半分にしたり、計算せずに答えを出したりできます。
入れ替えても変わらない物を見つけ、数える量を半分にする方法を、二重ループの回数と確率の数え上げで確かめます。
文 ゆめさくコード編集部 公開 2026年10月30日 更新 2026年10月30日 出典を確かめた日 2026年10月30日
100 人の 全部の 組の 距離を 出すのに、 何回計算するか 4950 回 で足ります。100 × 100 = 10000 回 は要りません。
A と B の距離は、B と A の距離と同じです。自分と自分の距離は 0 なので計算しません。だから、全部の組 (i, j) のうち i < j の組だけを計算し、残りは写せば済みます。100 人 なら 100 × 99 ÷ 2 = 4950 組です。
入れ替えても変わらない性質を、対称性と呼びます。物理学や群論でも大事な考えですが、この回ではプログラミングで数える量を減らす使い方に絞ります。この回では、対称性を見つけて数える量を半分にする方法と、計算せずに答えを出す方法を、 Python で回数を数えて確かめます。
対称性とは 入れ替えても 変わらない性質 対称性は、ある操作をしても変わらない性質です。操作には、裏返す、回す、2 つ を入れ替えるなどがあります。どの操作で変わらないかを言うと、対称性の中身が決まります。
操作 変わらない物の例 呼び方 直線で折り返す 二等辺三角形、 y = x² のグラフ 線対称 1 点の 周りに 180 度回す 平行四辺形、 y = x³ のグラフ 点対称 2 つの 値を 入れ替える x + y、 x × y、 2 人の距離 対称式、 対称な関係 中心の 周りに 一定の 角度だけ回す 正三角形 (120 度)、 正方 形 (90 度) 回転対称 並びを逆にする 「しんぶんし」のような回文 回文
y = x² のグラフは、x を −x に替えても y が変わらないので、y 軸について線対称です。
対称式 x と y を入れ替えても変わらない式を、対称式と呼びます。x + y と x × y は対称式です。x² + y² も対称式で、x² + y² = (x + y)² − 2xy と、x + y と xy だけで書けます。x − y は入れ替えると符号が変わるので、対称式ではありません。
組を 1 度だけ数える n 人の中の 2 人 の組で、順番を区別しない物は、n × (n − 1) ÷ 2 組です。順番を区別して数えた n × (n − 1) 通りは、(i, j) と (j, i) を 2 回 ずつ数えているので、2 で割ります。
数え方 n = 4 n = 100 何を数えたか i と j を全部回す 16 10000 自分との 組と、 逆向きの組も入る i ≠ j 12 9900 逆向きの 組を 2 回数える i < j 6 4950 どの 組も 1 回
計算せずに 答えを出す サイコロを A と B が 1 個 ずつ振ります。A の目が B より大きい確率はいくつかを考えます。A と B を入れ替えても状況は同じなので、「A が大きい」と「B が大きい」の確率は同じです。同じ目になる確率は 1/6 なので、残りの 5/6 を半分に分けて、A が大きい確率は 5/12 です。36 通りを数えなくても出ます。
動かして確かめる 1 本 目は、二重ループの 3 つ の書き方で、何組を処理するかを数えます。
動かす 組を 1 度だけ数える
実行すると、次の通りに出ます
4 16 12 6 6
100 10000 9900 4950 4950i < j の組は n × (n − 1) ÷ 2 と一致しました。実際のコードでは、内側の ループ を range(i + 1, n) から始めると、余分な組を回さずに済みます。
2 本 目は、平面上の点の距離の表を作ります。全部の組を計算した表と、半分だけ計算して写した表が同じになるかを確かめます。
動かす 距離の表を半分だけ計算する
実行すると、次の通りに出ます
全部 10000 回
半分 4950 回
同じ表 True計算の回数は 10000 回 から 4950 回 に減り、表は全く同じでした。math.dist は 2 点 の間のまっすぐな距離を返す 関数 で、2 点 を入れ替えても同じ値です。
3 本 目は、サイコロの確率を、36 通りを全部数えて確かめます。
動かす A の目が B より大きい確率
実行すると、次の通りに出ます
A が大 5/12
B が大 5/12
同じ 1/6
対称性から 5/12A が大きい確率と B が大きい確率は、どちらも 15/36 = 5/12 でした。対称性で出した 5/12 と一致します。
4 本 目は、回文の判定です。前から i 番目と後ろから i 番目を比べるので、比べるのは前半の分だけです。
動かす 回文は半分だけ比べる
実行すると、次の通りに出ます
'しんぶんし' (True, 2)
'abccba' (True, 3)
'abcdba' (False, 3)
'a' (True, 0)
'' (True, 0)右の数は比べた回数です。5 文字の「しんぶんし」は 2 回 、6 文字は 3 回 で、真ん中の文字は比べません。1 文字と空の文字列は、比べずに回文と判定します。
対称性で 考えると外れる所 向きの ある 関係は 対称ではない SNS の「フォロー」は、A が B をフォローしても、B が A をフォローするとは限りません。一方通行の道の所要時間や、片道の運賃も同じです。向きのある関係で i < j の組だけを調べると、半分を見落とします。半分にする前に、入れ替えて本当に同じかを確かめます。
自分との 組と、 同じ値の扱い i ≤ j と i < j では、自分との組 (i, i) が入るかが違います。「同じ人を 2 回 選んでよいか」は問題ごとに違うので、境目の書き方を問題文と照らします。サイコロの問題でも、同じ目 (1/6) を除いてから半分にしました。
順番を 区別する 問題で 半分にする 順番が意味を持つ問題 (1 位と 2 位を決める、送り手と受け手) では、(i, j) と (j, i) は別の物です。並べ方の数 (順列) を数えるべき所で 2 で割ると、答えが半分になります。
仕事と コンテストで どう使うか 対称性で考える場面は、次の通りです。
二重ループ。似た文書の組を探す、衝突する図形の組を探すなど、全部の組を調べる処理を for j in range(i + 1, n) で半分にする 表を半分だけ持つ。距離の表や相関係数の表は対称なので、半分を計算して写す。行列の分野では対称行列と呼ぶ (分野 6) 重複を除く。友達の組を数えるとき、(A, B) と (B, A) を同じ組として 1 回 だけ数える。 SQL なら a.id < b.id の条件で自己結合する 確率と期待値。入れ替えても同じ状況なら、それぞれの確率は同じと言える。計算の量を減らし、答えの確かめにも使える 図形と画面。左右対称の図は、片側を描いて反転させれば済む よくある問い 対称性とは何ですか ある操作をしても変わらない性質です。操作が折り返しなら線対称、180 度の回転なら点対称、2 つ の値の入れ替えなら対称な式や関係と呼びます。プログラミングでは、主に「2 つ を入れ替えても答えが同じ」という形で使います。
n 人から 2 人を 選ぶ組の 数は、 なぜ 2 で 割るのですか 1 人 目を n 通り、2 人 目を残りの n − 1 通りで選ぶと、(A, B) と (B, A) を別に数えてしまいます。どの組も 2 回 ずつ数えているので、n × (n − 1) を 2 で割ります。
線対称と 点対称の 違いは何ですか 線対称は、ある直線で折り返すと重なる形です。点対称は、ある点の周りに 180 度回すと重なる形です。正方形のように、両方を持つ形もあります。
対称性を 使って よいかは、 どう 確かめますか 入れ替えた (j, i) の答えが、本当に (i, j) と同じかを、小さい例で全部数えて比べます。2 本 目のコードのように、全部計算した表と半分だけ計算した表を比べるテストを書いておくと安心です。
確認クイズ 答えだと 思う 選択肢を 押すと、 その場で 正誤と 理由が 開きます。 3 問すべてに 正しく 答えると、 この 回は 修了で、 石が 緑に 変わります (この 端末の ブラウザに 残ります)。 間違えた 問いは、 あとから 解き直せます。
1 問目
20 チームが、どの 2 チームとも 1 回 ずつ試合をします。試合は何回ですか。
2 問目
次の式のうち、x と y を入れ替えても変わらない (対称式である) ものはどれですか。
ア x − y イ x² + y² ウ x ÷ y エ 2x + y 3 問目
SNS で、利用者どうしの「フォロー」の向きを全部調べたいとき、正しいのはどれですか。
ア i < j の 組だけ 調べれば、 全部分かる イ フォローは 向きの ある 関係なので、 (i, j) と (j, i) を 両方調べる ウ (i, i) の 組だけ 調べればよい エ 半分の 組を 乱数で 選べば、 全部分かる 説明課題 「100 人 の全部の組の距離を、10000 回 ではなく 4950 回 の計算で出せる理由」を、対称性という言葉を使って 3 文で説明してください。書いたら、下の模範解答を開いて比べてください。
あなたの説明
模範解答 模範解答を開く 自分の 説明を 書いてから 開いて、 比べてください。
2 人 の距離は、A から B でも B から A でも同じという対称性があるので、(i, j) と (j, i) は 1 回 だけ計算して写せばよい。自分との距離は 0 なので計算しなくてよい。だから i < j の組だけを計算すればよく、その数は 100 × 99 ÷ 2 = 4950 組になる。
二重ループを 書く 前に 「(i, j) と (j, i) は 同じ 物か」を 問えると、 計算を 半分に でき、 重複の 数え間違いも 防げます。 いまの 自分が 転職までの 道の どの 段に いるかは、 転職診断で 確かめられます。
もっと深く この 回の 続きを、 ゆめさくの コースの 章や 道具で 深められます。 頁の 中の 確認クイズに 答えた あと、 手を 動かす量を 増や したい ときに 使ってください。
一次資料 どれも 2026年 10月 30日 に開いて、題と中身を確かめました。